Как использовать afterEach с модульными асинхронными тестами Mocha? - PullRequest
0 голосов
/ 03 сентября 2018

В приведенном ниже коде afterEach() вызывается до Обещания в тестах были разрешены и вызывается done(). Я хочу, чтобы он запускался после завершения испытаний с done(). Как правильно это сделать?

describe ("Some test", ()=>{
    afterEach(()=>{
        console.log("Done")
    })

    it("Does something", done=>{
        new Promise (resolve=>{
            let result = doSomething();
            assert.isOK(result);
            done();
        })
    })
})

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Это не то, как вы используете Обещания с Мокко.

Mocha поддерживает асинхронные тесты, просто возвращая обещание (без необходимости done()) или используя функцию async в качестве теста (которая неявно возвращает обещание), например так:

describe ("Some test", ()=>{
    afterEach(()=>{
        console.log("Done")
    })

    it("Does something", async () => {
        const result = await someAsyncFunction();
        assert.isOK(result);
        // no need to return from this one, async functions always return a Promise.
    })
})

или

describe ("Some test", ()=>{
    afterEach(()=>{
        console.log("Done")
    })

    it("Does something", done=>{
        // note the return
        return new Promise (resolve=>{
          doSomethingWithCallback(result => {
            assert.isOK(result);
            resolve(result);
          });
        })
    })
})

Обратите внимание, что использование конструктора new Promise() в не низкоуровневом коде считается антипаттерном. См. Этот вопрос для получения более подробной информации: Что такое явное обещание построения antipattern и как его избежать?

0 голосов
/ 03 сентября 2018

Полагаю, что нижеприведенное (выполнение обещания на протяжении всего теста) делает то, что я хочу, но, безусловно, должен быть лучший способ ..?

let testPromiseChain = Promise.resolve();

describe("Some test", () => {
    afterEach(() => {
        testPromiseChain
        .then(x=>{
            console.log("Done")
        })

    })

    it("Does something", done => {
        testPromiseChain = testPromiseChain
            .then(() => {
                new Promise(resolve => {
                    let result = doSomething();
                    assert.isOK(result);
                    done();
                })

            })

    })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...