如何避免摩卡测试用例超时?
How to avoid timeouts in mocha testcases?
我在这里附上我的代码,我正在传递完成回调并使用超级测试来请求。由于我在 request.end 块内的测试用例中使用 assert/expect 为什么我需要担心超时?我在这里犯了什么错误。
it('should get battle results ', function(done) {
request(url)
.post('/compare?vf_id='+vf_id)
.set('access_token',access_token)
.send(battleInstance)
.end(function(err, res){ // why need timeout
if (err) return done(err);
console.log(JSON.stringify(res.body));
expect(res.body.status).to.deep.equal('SUCCESS');
done();
});
});
响应后的测试用例结果:
错误:超时超过 2000 毫秒。确保在此测试中调用了 done() 回调。
如果我是 运行 我的带有 mocha 命令的测试用例,那么它会显示此错误,而如果我是 运行 测试 mocha --timeout 15000
,那么测试用例会正确通过。但是我想避免超时,我该怎么做?
这是你需要的
describe('a suite of tests', function() {
this.timeout(500);
it('should take less than 500ms', function(done){
setTimeout(done, 300);
});
it('should take less than 500ms as well', function(done){
setTimeout(done, 250);
});
})
在 mocha 中,默认设置为 2 秒 (2000ms
)。
您可以使用 --timeout xxxx
标志从命令行延长默认(全局)超时。
如果您想改为更改特定测试用例的超时,您可以使用 this.timeout( xxxx )
函数 - 请注意它不适用于 arrow functions
-(其中 xxxx
是一个像 20000
这样的数字代表毫秒)。
it('My test', function(){
this.timeout(5000);
//... rest of your code
});
您还可以设置一组测试用例的超时时间(由 describe
包裹):
describe("My suite", function(){
// this will apply for both "it" tests
this.timeout(5000);
it( "Test 1", function(){
...
});
it( "Test 2", function(){
...
});
});
它也适用于 before
、beforeEach
、after
、afterEach
块。
此处提供更多文档:https://mochajs.org/#timeouts
考虑到 运行 您的测试通常需要 2 秒的时间,所以我想说延长默认超时应该是一个例外,而不是您测试中的常见规则。
此外,如果您的测试不是异步的,并且您必须延长超时时间,我强烈建议您在延长超时时间之前检查花费这么长时间的函数。
If I am running my testcases with mocha command then its show this error while If I am running test mocha --timeout 15000
then testcase is passing correctly. But I want to avoid timeout, How can I do that?
您无法避免 超时,因为看起来您正在测试远程服务。如果出于某种原因对该服务的请求需要很长时间,您将运行超时。
您可以通过将超时设置为 0 来告诉 Mocha 禁用超时检查,但这可能也不理想,因为它可能会导致每个测试用例花费过多的时间。
作为替代方案,您可以模拟 request
(我假设是 superagent
),这样您就可以控制整个 HTTP request/response 流,但是因为它看起来像您测试一个 远程 服务(你无法控制的服务),这会使这个特定的测试用例变得毫无意义。
Test-specific timeouts may also be applied, or the use of this.timeout(0) to disable timeouts all together:
要禁用超时,只需将其设置为 0。我在调试时使用 mocha <file> --timeout 0
,因此不会引发超时错误。
我在这里附上我的代码,我正在传递完成回调并使用超级测试来请求。由于我在 request.end 块内的测试用例中使用 assert/expect 为什么我需要担心超时?我在这里犯了什么错误。
it('should get battle results ', function(done) {
request(url)
.post('/compare?vf_id='+vf_id)
.set('access_token',access_token)
.send(battleInstance)
.end(function(err, res){ // why need timeout
if (err) return done(err);
console.log(JSON.stringify(res.body));
expect(res.body.status).to.deep.equal('SUCCESS');
done();
});
});
响应后的测试用例结果: 错误:超时超过 2000 毫秒。确保在此测试中调用了 done() 回调。
如果我是 运行 我的带有 mocha 命令的测试用例,那么它会显示此错误,而如果我是 运行 测试 mocha --timeout 15000
,那么测试用例会正确通过。但是我想避免超时,我该怎么做?
这是你需要的
describe('a suite of tests', function() {
this.timeout(500);
it('should take less than 500ms', function(done){
setTimeout(done, 300);
});
it('should take less than 500ms as well', function(done){
setTimeout(done, 250);
});
})
在 mocha 中,默认设置为 2 秒 (2000ms
)。
您可以使用 --timeout xxxx
标志从命令行延长默认(全局)超时。
如果您想改为更改特定测试用例的超时,您可以使用 this.timeout( xxxx )
函数 - 请注意它不适用于 arrow functions
-(其中 xxxx
是一个像 20000
这样的数字代表毫秒)。
it('My test', function(){
this.timeout(5000);
//... rest of your code
});
您还可以设置一组测试用例的超时时间(由 describe
包裹):
describe("My suite", function(){
// this will apply for both "it" tests
this.timeout(5000);
it( "Test 1", function(){
...
});
it( "Test 2", function(){
...
});
});
它也适用于 before
、beforeEach
、after
、afterEach
块。
此处提供更多文档:https://mochajs.org/#timeouts
考虑到 运行 您的测试通常需要 2 秒的时间,所以我想说延长默认超时应该是一个例外,而不是您测试中的常见规则。 此外,如果您的测试不是异步的,并且您必须延长超时时间,我强烈建议您在延长超时时间之前检查花费这么长时间的函数。
If I am running my testcases with mocha command then its show this error while If I am running test
mocha --timeout 15000
then testcase is passing correctly. But I want to avoid timeout, How can I do that?
您无法避免 超时,因为看起来您正在测试远程服务。如果出于某种原因对该服务的请求需要很长时间,您将运行超时。
您可以通过将超时设置为 0 来告诉 Mocha 禁用超时检查,但这可能也不理想,因为它可能会导致每个测试用例花费过多的时间。
作为替代方案,您可以模拟 request
(我假设是 superagent
),这样您就可以控制整个 HTTP request/response 流,但是因为它看起来像您测试一个 远程 服务(你无法控制的服务),这会使这个特定的测试用例变得毫无意义。
Test-specific timeouts may also be applied, or the use of this.timeout(0) to disable timeouts all together:
要禁用超时,只需将其设置为 0。我在调试时使用 mocha <file> --timeout 0
,因此不会引发超时错误。