为什么我总是收到错误消息:异步Mocha超过了2000ms的超时时间?

时间:2018-11-12 08:45:02

标签: javascript selenium testing mocha

我正在尝试在Selenium上开始进行javascript测试,但是一开始我陷入了困境。

MochaJS从不等待测试结束,而是在2秒后抛出

Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/home/pavel/code/gscc/test/test.js)

我的代码是

const {Builder, By, Key, until} = require('selenium-webdriver');
let assert = require('chai').assert;

describe('Test Suite', function() {
    it('should do', async function(done) {
        try {
        let driver = new Builder().forBrowser('firefox').build();
        await driver.get('http://www.google.com/ncr');
        const title = await driver.getTitle();
        assert.equal(title, 'Google');
        } catch(err) {
            console.log(err);
        } finally {
            await driver.quit();
        }
        done();
    })
})

Mocha说我的代码中没有兑现承诺,但是有这样的承诺吗?

1 个答案:

答案 0 :(得分:0)

好的,在调查之后,我将尝试回答我自己的问题。

首先,错误:超过2000毫秒超时。是一个常见问题,仅是-超过了超时时间,但测试没有运行(因为它们需要更多时间才能运行)。记录在stackoverflow pretty good上。

下一个问题是Mocha等待诺言或完成功能以完成测试。当我写

it('should do', async function(done) {
    try {
    let driver = new Builder().forBrowser('firefox').build();
    await driver.get('http://www.google.com/ncr');
    const title = await driver.getTitle();
    assert.equal(title, 'Google');
    } catch(err) {
        console.log(err);
    } finally {
        await driver.quit();
    }
    done();
})

它既没有实现承诺,也没有完成,因为它不适用于异步/等待机制,仅适用于标准承诺。

所以我删除了done,也完全删除了try-catch块,现在终于可以了!

最终代码是

describe('Test Suite', function() {
    this.timeout(0);

    before(async function() {
        this.driver = await new Builder().forBrowser('firefox').build();
    });

    it('should do', async function() {
        await this.driver.get('http://www.google.com/ncr');
        const title = await this.driver.getTitle();
        assert.equal(title, 'Google1121312213');
    })

    after(async function() {
        this.driver.quit();
    })
});