Javascript 数组的side-forEach方法中代码的NodeJs测试用例
这里的文件是一个数组,类似于var files=['/tmp/1.pdf','/tmp/2.pdf'] 方法:Javascript 数组的side-forEach方法中代码的NodeJs测试用例,javascript,node.js,mocha.js,sinon,Javascript,Node.js,Mocha.js,Sinon,这里的文件是一个数组,类似于var files=['/tmp/1.pdf','/tmp/2.pdf'] 方法: var createAttachmentsForMail = function (files) { var attachmets = []; files.forEach(function (value) { attachmets.push( { "Content-type": mime.looku
var createAttachmentsForMail = function (files) {
var attachmets = [];
files.forEach(function (value) {
attachmets.push(
{
"Content-type": mime.lookup(value),
"FileName": path.basename(value),
"content": new Buffer(fs.readFileSync(value)).toString('base64')
}
);
});
return attachmets;
};
测试方法:我想测试attachment.push调用了2次,但如何测试?我还想声明返回的附件。
describe("Create attachments", function() {
it('from pdf path', function() {
var files = [
'/tmp/1.pdf',
'/tmp/2.pdf'
];
sinon.stub(fs, "readFileSync");
sinon.stub(files);
mailSender.createAttachmentsForMail(files);
sinon.assert.calledOnce(files.forEach);
fs.readFileSync.restore();
files.forEach.restore();
});
});
调用
sinon.stub(文件)时代码>插入文件数组的所有方法。这意味着forEach实际上不会被执行,您也不会生成任何文件。
这就是为什么我猜你不能检查文件的数量
第二件事是,不需要测试像“if.push调用了两次”或“if.forEach”这样的东西。因为如果您稍微更改了实现(例如,您开始使用lodash u2; each而不是Array.prototype.forEach),您的测试将停止工作
您应该测试行为,而不是内部实现
var assert=require('assert');
描述(“#createAttachmentsForMail”,()=>{
它('应形成适当的文件名/内容类型等',函数(){
变量文件=[
“/tmp/1.pdf”,
“/tmp/2.pdf”
];
//另外,让我们让readFileSync始终返回模拟数据
sinon.stub(fs,“readFileSync”,()=>“模拟内容”);
var attachments=createAttachmentsForMail(文件);
//测试我们是否收到了2个附件。
断言。相等(附件。长度,2);
对于(附件的var附件){
//检查我们是否收到了正确的内容类型
assert.equal(附件['Content-type'],'application/pdf');
//做其他需要的检查。。。
}
fs.readFileSync.restore();
});
});代码>为什么不检查createAttachmentsForMail的返回值是否是这两个项的数组?@AndersBornholm好的,您可以编写代码来写入createAttachmentsForMail的返回值吗?提前谢谢。