测试完全使用存根功能

问题描述 投票:1回答:1

我一直在写测试,在过去几个星期。在我工作的地方,我们是用摩卡作为我们的测试运行,并作为柴断言库。我也使用兴农创建存根和存在的东西是缠着我不断。我已经写测试了几个,我存根每个依赖于功能和最差的我并不甚至考虑它,我测试功能是接受参数的函数。让我举个例子吧

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);
        });
    });
  },
}
  1. 现在,当我写测试这个功能,我已经在那里我存根Promise.all()抛出错误的情况下。
  2. 对于我的第二次测试,我存根Promise.all()返回一个错误的正值和存根ourHelperLib.toArray()抛出错误,并检查函数处理与否。
  3. 对于我的第三次测试我存根qazxsw POI,qazxsw POI和POI qazxsw返回误报,然后检查输出,用于这是操作的结果值的解决承诺。

从函数的定义很清楚,既传递给函数的参数直接传递给我磕碰,因此我可以完全忽略这些值的依赖关系,这里就是我的意思

Promise.all()

由于我不处理传递给我的存根函数的参数,我不是在所有测试传递到它的数据的基础上的功能。我只是测试功能ourHelperLib.toArray()的逻辑结构。

这是一个好的做法呢?我还没有发现大量固体的答案,因为我是负责引进指导方针写入其中的我目前的工作单元测试,这是我认为是非常重要的东西。

和平!

javascript unit-testing testing sinon stub
1个回答
1
投票

您可以通过许诺给你的函数,而无需任何存根了很多你所描述的。


我有,我存根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.toArrayPromise是可选的。除非他们在计算上昂贵的(例如,如果他们进行网络调用)的话,通常是有意义的那样称呼他们正常。

你可以通过你想给ourHelperLib.toArray解决ourHelperLib.toArrays的阵列中的数据,并简单地传递你要发送到ourHelperLib.toObject作为第二个参数的值:

ourHelperLib.toArray

......并检查所产生的Promise解析到预期值。


一般来说,是坚持黑箱测试的最佳实践。

此功能不会出现任何副作用,只是返回解析为基于传递的参数结果的ourHelperLib.toObject

除非函数计算昂贵的依赖,那么只要有可能,最好通过简单地传递参数,并验证结果来测试这样的功能。

© www.soinside.com 2019 - 2024. All rights reserved.