摩卡第一单元测试总是慢于其他测试

时间:2017-11-10 14:49:22

标签: node.js unit-testing mocha sinon

出于某种原因,我的测试服的第一次单元测试总是慢于其他测试。在我的控制台中执行测试时,我会得到类似的内容:

√ unit test A (483ms)
√ unit test B

但是在代码中如果我将单元测试B更改为单元测试A以上,我得到了这个:

√ unit test B (470ms)
√ unit test A

出于某种原因,第一次单元测试总是变慢,因此我认为,不是我的代码慢,而是摩卡的东西。同时我还有其他测试套装正在测试其他代码并且工作正常,所以我很困惑。也许不是摩卡,但由于不确定,我需要问你是否知道会发生什么。

测试是这样的:

let target = require('...');

describe('Module of unit tests', function () {
  this.timeout(1000);
  before(function () {
        ...
    target = proxyquire('...', {
      'node-chartist': sinon.stub().resolves('...'),
      'ws': function(){
        return {
          'close': function(){ /*Do nothing*/ },
          'send': function(){ /*Do nothing*/ },
          'on': function(arg, callback){
            ...
          }
        };
      }
    });
  });

  //Warning happens here
  it('unit test A', function () {
    ...
    target();
    ...
  });

  //If this unit test goes above unit test A, this will be the one to get 
  the warning.
  it('unit test B', function () {
    ...
    target();
    ...
  });
})

`

我试图在其他项目中重现没有成功,所以我怀疑你能够做到,但我正在做的是执行测试适合上面的单元测试A然后执行测试适合上面的单元测试B.

版本:

node v6.11.4
npm 3.10.10
mocha 4.0.1
sinon 4.1.2
chai 3.5.0
proxyquire 1.8.0

我使用fiddler来确保在执行单元测试时,没有为外部做出任何网络请求,以确保延迟不是由任何网络请求引起的。

我还调试了单元测试正在测试的代码,在任何情况下我都没有看到任何延迟的原因。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

问题出现了,因为我正在使用proxyquire制作一些存根,默认情况下,即使存根也会加载npm模块。在我的情况下,我有一个名为node-chartist的模块,在第一次单元测试期间加载,其他单元测试使用缓存,我想。这就是为什么其他单元测试速度不慢。

为了解决这个问题,我不得不使用proxyquire的noCallThru()方法,这使得proxyquire不会加载任何原始依赖项。

亲切的问候