Sinon js用确切的参数检查存根
Sinon js用确切的参数检查存根
要求:我想testing用正确的参数调用ejs.renderFile。
我的函数文件:html_to_pdf_converter.js
var ejsToPdfConvert = function (template, data, callback) { var row = data.voucher; html = ejs.renderFile( path.join(__dirname+'/../../views/', template), { data: data }, function (error, success) { if (error) { callback(error, null); } else { var pdfPath = getPdfUploadPath(row); htmlToPdf.convertHTMLString(success, pdfPath, function (error, success) { if (error) { if (typeof callback === 'function') { callback(error, null); } } else { if (typeof callback === 'function') { callback(null, success, pdfPath); } } }); } }); };
Mttesting是:html_to_pdf_converter.test.js
describe("ejs to html converter", function () { it('ejs to html generation error', function() { var data = { voucher: {}, image_path: 'tmp/1.jpg', date_format: '', parameters: '' }; var cb_1 = sinon.spy(); var cb_2 = sinon.spy(); var ejsStub = sinon.stub(ejs, 'renderFile'); var pathStub = sinon.stub(path, 'join'); ejsStub.callsArgWith(2, 'path not found', null); htmlToPdfConverter.ejsToPdfConvert('voucher', data, cb_1); sinon.assert.calledOnce(ejs.renderFile); sinon.assert.calledOnce(path.join); sinon.assert.calledOnce(cb_1); sinon.assert.calledWith(ejsStub, path.join('views/', templateName), data, cb_2); //Error in this line ejsStub.restore(); pathStub.restore(); }); });
这里有两个问题:
sinon.assert.calledWith(ejsStub, path.join('views/', templateName), data, cb_2);
首先,你需要用参数'data'调用ejsStub,但是当你实际调用renderFile的时候,你可以像这样包装它: {data: data}
。
第二个是,cb_2不等于您实际传递给renderFile的function (error, success) { if (error) ... }
。
要使其运行如下所示:
sinon.assert.calledWith(ejsStub, path.join('views/', templateName), {data: data});