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});