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

Selenium 如何避免mocha异步测试超时,selenium,protractor,timeout,mocha.js,assert,Selenium,Protractor,Timeout,Mocha.js,Assert,我有一个摩卡咖啡测试,我正试图运行,但它不断给我以下错误 错误:超过2000毫秒的超时时间。对于异步测试和挂钩,请确保调用done it('should login into account', (done) => { let user_login = require("../../data/login.json"); mongoManager.insertDocuments("user", user_login.content, () => {

我有一个摩卡咖啡测试,我正试图运行,但它不断给我以下错误

错误:超过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中运行异步测试的最佳方式是什么,这样它就不会超过它的预期时间?或者我应该设置测试函数的超时时间吗?您需要这样做

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();
        });
});
如果你读

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

如果您不需要使用Mocha的上下文,lambdas应该可以工作。然而,如果最终需要重构,那么重构的结果将更加困难


SetTimeOver到底要完成什么,50000应该完成什么?这将调用50秒后的done返回值。为什么?如果从现在起50秒后调用done,代码将读取setTimeoutdone,50000,如果这是您正在做的,这将有一定的意义,但是调用done的返回值毫无意义;基本上是解决上述问题的两种不同尝试。即使没有setTimeoutdone(50000),超时事件仍会发生;线因此,为了简单起见,请阅读假设setTimeout行不存在的代码。
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);
  });
});