出于某种原因,我的测试服的第一次单元测试总是慢于其他测试。在我的控制台中执行测试时,我会得到类似的内容:
√ 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来确保在执行单元测试时,没有为外部做出任何网络请求,以确保延迟不是由任何网络请求引起的。
我还调试了单元测试正在测试的代码,在任何情况下我都没有看到任何延迟的原因。
感谢您的帮助。
答案 0 :(得分:0)
问题出现了,因为我正在使用proxyquire制作一些存根,默认情况下,即使存根也会加载npm模块。在我的情况下,我有一个名为node-chartist的模块,在第一次单元测试期间加载,其他单元测试使用缓存,我想。这就是为什么其他单元测试速度不慢。
为了解决这个问题,我不得不使用proxyquire的noCallThru()方法,这使得proxyquire不会加载任何原始依赖项。
亲切的问候