我一直在写测试,在过去几个星期。在我工作的地方,我们是用摩卡作为我们的测试运行,并作为柴断言库。我也使用兴农创建存根和存在的东西是缠着我不断。我已经写测试了几个,我存根每个依赖于功能和最差的我并不甚至考虑它,我测试功能是接受参数的函数。让我举个例子吧
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()
的逻辑结构。
这是一个好的做法呢?我还没有发现大量固体的答案,因为我是负责引进指导方针写入其中的我目前的工作单元测试,这是我认为是非常重要的东西。
和平!
您可以通过许诺给你的函数,而无需任何存根了很多你所描述的。
我有,我存根Promise.all()抛出错误的情况下,
相反磕碰ourHelperLib.toObject()
的,只是通过与拒绝const stubOurHelperLibToThrowError = argFromCaller => {
throw new Error("This is an error");
}
给你的函数的数组:
someFunc()
......这将导致Promise.all
下降到Promise
并与错误拒绝。
我存根Promise.all()返回一个错误的正值和存根ourHelperLib.toArray()抛出错误,并检查函数处理与否
再次,代替磕碰someFunc([Promise.reject(new Error('fail'))], null)
,只是通过与解决Promise.all
的数组:
catch
您可以存根Promise.all
抛出异常,或有你Promise
阵列解决你知道会造成someFunc([Promise.resolve('a value')], null)
扔东西。
对于我的第三次测试我存根Promise.all(),ourHelperLib.toArray()和ourHelperLib.toObject()返回误报,然后检查输出,用于这是操作的结果值的解决承诺。
打桩ourHelperLib.toArray
和Promise
是可选的。除非他们在计算上昂贵的(例如,如果他们进行网络调用)的话,通常是有意义的那样称呼他们正常。
你可以通过你想给ourHelperLib.toArray
解决ourHelperLib.toArray
s的阵列中的数据,并简单地传递你要发送到ourHelperLib.toObject
作为第二个参数的值:
ourHelperLib.toArray
......并检查所产生的Promise
解析到预期值。
一般来说,是坚持黑箱测试的最佳实践。
此功能不会出现任何副作用,只是返回解析为基于传递的参数结果的ourHelperLib.toObject
。
除非函数计算昂贵的依赖,那么只要有可能,最好通过简单地传递参数,并验证结果来测试这样的功能。