Почему я продолжаю получать сообщение об ошибке: Превышено время ожидания 2000 мс для Mocha при асинхронном подключении? - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь начать тестирование JavaScript на Selenium, но я застрял в начале.

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();
    })
})

Мокко говорит, что в моем коде есть нерешенные обещания, но есть ли такие?

1 Ответ

0 голосов
/ 12 ноября 2018

Хорошо, после расследования я постараюсь ответить на свой вопрос, как только решил его.

Во-первых, ошибка : превышено время ожидания 2000 мс. является распространенной проблемой, просто превышено время ожидания, но тесты не выполнялись (потому что им нужно больше времени для выполнения). Это документировано на stackoverflow довольно хорошо .

Следующая проблема заключается в том, что 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();
})

Он не получил ни обещания, ни выполненного, потому что он не работает с механизмом асинхронного ожидания / ожидания , только со стандартными обещаниями.

Итак, я удалил готово, а также полностью удалил блок 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();
    })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...