#angular #async-await #jasmine #protractor
#angular #async-ожидание #jasmine #транспортир
Вопрос:
Для тестирования e2e я использую транспортир с Jasmine, и поток управления отключен. Я знаю, что транспортир использует jasminewd2 адаптер для Jasmine. И что это усиливает ожидание, так что оно автоматически разворачивает обещания перед выполнением утверждения. Таким образом, оба приведенных ниже утверждения имеют одинаковый эффект.
expect(await someFn()).toBe..
await expect(someFn()).toBe..
Есть ли какая-либо ситуация, когда приведенные выше утверждения будут вести себя по-другому? Какой рекомендуемый вариант? Спецификация примера здесь следует второму подходу, когда сначала ставится ожидание. Есть ли какое-либо преимущество в этом?
[Редактировать 1] Одно отличие, которое я обнаружил, — это способ обработки отклонения обещания. Try catch будет работать в обоих случаях, но второй вариант позволяет перехватывать обещания.
it('should throw error 1', async () => {
try {
expect(await someFn()).toBe(1);
} catch (err) {
expect(err).toEqual('Unable to calculate');
}
});
it('should throw error 2', async () => {
await expect(someFn()).toBe(1)
.catch((err) => expect(err).toEqual('Unable to calculate'));
});
Ответ №1:
Вы правы в своих объяснениях о jasminewd2.
Я бы выбрал вариант 1, поместив await
внутри expect()
функции, потому что там лежит фактическое обещание, которого нужно ожидать.
Я не вижу никакого преимущества для оболочек, теперь, когда поток управления в транспортире был заменен на async / await.
Комментарии:
1. Одно отличие, которое я вижу, заключается в том, как обрабатывается отклонение обещания.