Какое правильное использование в тесте транспортира? ожидать ожидать(someFn()).toBe.. или ожидать(await someFn()).toBe

#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. Одно отличие, которое я вижу, заключается в том, как обрабатывается отклонение обещания.