首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何避免摩卡测试中的超时?

如何避免摩卡测试中的超时?
EN

Stack Overflow用户
提问于 2016-04-28 06:54:36
回答 4查看 11.4K关注 0票数 10

在这里,我附加了我的代码,我传递完成回调,并使用supertest作为请求。既然我在request.end块中的测试用例中使用了assert/expect,那么我为什么需要担心超时呢?我在这里犯了什么错误。

代码语言:javascript
运行
复制
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();
      });
 });

响应后的Testcase结果:错误:超过2000 of的超时。确保在此测试中调用done()回调。

如果我使用mocha命令运行测试用例,那么它将显示此错误,而如果我正在运行测试mocha --timeout 15000,则testcase将正确传递。但我想避免超时,我怎么能做到呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-04-28 08:24:22

如果我使用mocha命令运行测试用例,那么它将显示此错误,而如果我正在运行测试mocha --timeout 15000,则testcase将正确传递。但我想避免超时,我怎么能做到呢?

您无法避免超时,因为看起来您正在测试远程服务。如果由于任何原因,对该服务的请求需要很长时间,则会遇到超时。

您可以通过将超时设置为0来告诉Mocha禁用超时检查,但这可能也不理想,因为这可能会导致每个测试用例占用过多的时间。

作为另一种选择,您可以模拟request (我假设它是superagent),这样您就可以控制整个HTTP /response流,但是因为它看起来像是在测试一个远程服务(您无法控制这个服务),这将使这个特定的测试案例变得毫无意义。

票数 13
EN

Stack Overflow用户

发布于 2016-04-28 08:22:10

在摩卡中,默认设置的超时时间为2秒(2000ms)。

可以使用--timeout xxxx标志从命令行扩展默认(全局)超时。

如果您想更改特定测试用例的超时,可以使用this.timeout( xxxx )函数--注意,它不适用于arrow functions (其中xxxx是一个与20000类似的数,表示毫秒)。

代码语言:javascript
运行
复制
it('My test', function(){
  this.timeout(5000);
  //... rest of your code
});

还可以设置一组测试用例(由describe包装)的超时:

代码语言:javascript
运行
复制
describe("My suite", function(){
  // this will apply for both "it" tests
  this.timeout(5000);

  it( "Test 1", function(){
     ...
  });

  it( "Test 2", function(){
     ...
  });

});

它也适用于beforebeforeEachafterafterEach块。

更多的文档可以在这里找到:https://mochajs.org/#timeouts

考虑到2秒通常是运行测试的一个很好的时间,所以我要说,扩展默认超时应该是一个例外,而不是测试中的通用规则。另外,如果您的测试不是异步的,并且您必须延长超时,那么我强烈建议在扩展超时之前检查需要这么长时间的函数。

票数 8
EN

Stack Overflow用户

发布于 2020-11-29 23:01:36

摩卡:暂停

还可以应用特定于测试的超时,或者使用this.timeout(0)一起禁用超时:

要禁用超时,只需将其设置为。我在调试时使用mocha <file> --timeout 0,这样就不会引发超时错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36907362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档