【发布时间】:2019-02-07 09:07:15
【问题描述】:
过去几周我一直在编写测试。在我的工作地点,我们使用 Mocha 作为我们的测试运行程序,使用 Chai 作为断言库。我也在使用 Sinon 来创建存根,有些东西一直在困扰着我。我已经为几个函数编写了测试,其中我对函数中的每个依赖项进行了存根,最糟糕的是,我什至没有考虑我正在测试的函数正在接受的参数。举个例子吧
module.exports = {
"someFunc": (arg1, arg2) => {
return new Promise((resolve, reject) => {
Promise.all(arg1).then(data => {
let someArray = ourHelperLib.toArray(data);
let someObj = ourHelperLib.toObject(arg2);
if(someArray.length == 0){
reject("error");
}else{
resolve({
"array": someArray,
"object": someObj
});
}
}).catch(err => {
reject(err);
});
});
},
}
- 现在,当我为这个函数编写测试时,我遇到了一个我存根
Promise.all()以引发错误的情况。 - 对于我的第二个测试,我存根
Promise.all()以返回误报值,存根ourHelperLib.toArray()抛出错误并检查函数是否处理它。 - 对于我的第三个测试,我存根
Promise.all()、ourHelperLib.toArray()和ourHelperLib.toObject()以返回误报,然后检查输出中是否存在已解决的承诺,其值是操作的结果。
从函数定义中可以清楚地看出,传递给函数的两个参数都直接传递给我正在存根的依赖项,因此我可以完全忽略这些值,这就是我的意思
const stubOurHelperLibToThrowError = argFromCaller => {
throw new Error("This is an error");
}
由于我没有处理传递给我的存根函数的参数,所以我根本没有根据传递给它的数据来测试该函数。我只是在测试函数someFunc()的逻辑结构。
这是一个好习惯吗?我还没有找到很多可靠的答案,而且由于我负责在我目前工作的地方介绍编写单元测试的指南,所以我认为这是至关重要的。
和平!
【问题讨论】:
标签: javascript unit-testing testing sinon stub