async/await
Функция с задержкой обещания, которая терпит неудачу, если задана задержка 0:
const timeoutPromise = (time) => {
return new Promise((resolve, reject) => {
if (time === 0)
reject({ 'message': 'invalid time 0' })
setTimeout(() => resolve('done', time))
})
}
// ↓ ↓ ↓
it('promise selftest', async () => {
// positive test
let r = await timeoutPromise(500)
assert.equal(r, 'done')
// negative test
try {
await timeoutPromise(0)
// a failing assert here is a bad idea, since it would lead into the catch clause…
} catch (err) {
// optional, check for specific error (or error.type, error. message to contain …)
assert.deepEqual(err, { 'message': 'invalid time 0' })
return // this is important
}
assert.isOk(false, 'timeOut must throw')
log('last')
})
Положительный тест довольно прост. Неожиданный сбой (имитация с помощью 500→0
) автоматически завершит тест, так как отклоненное обещание возрастает.
Отрицательный тест использует идею try-catch. Однако: «жалобы» на нежелательный проход происходит только после предложения catch (таким образом, это не заканчивается в предложении catch (), вызывая дальнейшие, но вводящие в заблуждение ошибки.
Чтобы эта стратегия работала, нужно вернуть тест из предложения catch. Если вы не хотите тестировать что-либо еще, используйте другой блок () -.