Использование await
в теле функции превращает функцию проверки в функцию async
.
async
функции всегда возвращают Promise
.
Таким образом, в этом случае:
it('Sample test', async function(done) {
await Promise.resolve(0);
Promise.resolve(0).then(function() {
return done();
});
return null;
});
... тестовая функция возвращает Promise
, который преобразуется в null
.
В другом примере Mocha нене жалуйтесь, потому что код компилируется следующим образом:
it('working test', function(done) {
setTimeout(async function() {
return (await Promise.resolve(0));
}, 0);
Promise.resolve(0).then(function() {
return done();
});
return null;
});
..., поскольку await
теперь находится в теле функции, переданной в setTimeout
.
(обратите внимание, чтодва теста ведут себя очень по-разному ).
Нет причин использовать обе функции: done
и async / await
(или функцию, которая возвращает Promise
) поэтому Mocha не проходит тест с этой ошибкой.
Ваш первый тест можно упростить до этого:
it 'sample test', ()->
await Promise.resolve 0
await Promise.resolve 0
... или если вам нужно выполнить работу в then
цепочкеко второму Promise
вы можете просто сделать это:
it 'sample test', ()->
await Promise.resolve 0
await Promise.resolve 0
.then ->
// do stuff here