如何避免mocha异步测试的超时

时间:2017-08-25 15:54:23

标签: selenium protractor timeout mocha assert

我正在尝试运行摩卡测试,但它一直给我以下错误

错误:超出2000毫秒超时。对于异步测试和钩子,确保调用“done()”

it('should login into account', (done) => {
        let user_login = require("../../data/login.json");
        mongoManager.insertDocuments("user", user_login.content, () => {
            loginPage.setUserName('demodgsdg');
            loginPage.setPassword('123');
            loginPage.submit();
            browser.waitForAngularEnabled(true);
            Assert.equal(element(by.id('navbar')).isDisplayed(), true, "login page is not loaded");
            setTimeout(done(), 50000);
            done();
        });

    });

什么是在mocha中运行异步测试的最佳方式,以便它不超过其规定的时间?或者我应该在测试功能上设置超时

1 个答案:

答案 0 :(得分:2)

你需要这样做

it('should login into account', function (done) {
        this.timeout(50000);

        let user_login = require("../../data/login.json");
        mongoManager.insertDocuments("user", user_login.content, () => {
            loginPage.setUserName('demodgsdg');
            loginPage.setPassword('123');
            loginPage.submit();
            browser.waitForAngularEnabled(true);
            Assert.equal(element(by.id('navbar')).isDisplayed(), true, "login page is not loaded");
            setTimeout(done(), 50000);
            done();
        });
});

如果您阅读https://mochajs.org/#timeouts

  

不鼓励将箭头函数(“lambdas”)传递给Mocha。由于它的词汇绑定,这些函数无法访问Mocha上下文。例如,由于lambdas的性质,以下代码将失败:

describe('my suite', () => {
  it('my test', () => {
    // should set the timeout of this test to 1000 ms; instead will fail
    this.timeout(1000);
    assert.ok(true);
  });
});
  

如果您不需要使用Mocha的上下文,lambdas应该可以工作。但是,如果最终需要,结果将更难以重构。