Автоматизированный тест на детоксикацию истекает случайным образом - PullRequest
0 голосов
/ 14 февраля 2019

Я начал использовать Detox для создания тестирования пользовательского интерфейса автоматизации для нашего собственного приложения (здесь тестирование на iOS).

Я заметил, что Detox (или Jest) отключается случайным образом.Точно такой же тест иногда проходит, но в другой раз он застревает и не продолжает тест.По истечении времени ожидания Jest я получаю следующую ошибку

Timeout - Async callback was not invoked within the 40000ms timeout specified by jest.setTimeout.

  47 |     });
  48 |     describe('when the user taps on the payment history tab', () => {
> 49 |       it('should go on the payment history view', async () => {


  at Spec (node_modules/jest-jasmine2/build/jasmine/Spec.js:92:20)
  at Suite.<anonymous> (e2e/tests/loans/index.test.js:49:7)

Один из моих тестов выглядит так:

  it('should go on the payment history view', async () => {
    await element(by.id('product-tab-2')).tap();
    await waitFor(element(by.id('product-payment-history-1')))
      .toBeVisible()
      .withTimeout(5000);
    await expect(element(by.id('product-payment-history-1'))).toBeVisible();
  });

Я попытался использовать флаг «trace», чтобы увидетьесли были какие-либо подробности о том, почему он застревает.Кажется, что некоторые вызовы invoke пропускаются, и он пытается выполнить следующий тест, прежде чем он фактически завершит предыдущий.3 из 4 раз я бы сказал.

У кого-нибудь есть такая проблема?Есть ли способ это исправить?Или есть способ перезапустить тестовый набор, если что-то зависает?

Спасибо!

1 Ответ

0 голосов
/ 14 февраля 2019

Из документации по детоксикации для waitFor

ПРИМЕЧАНИЕ: waitFor не сработает при достижении тайм-аута, вместо этого он просто перейдет к следующей строке.Чтобы убедиться, что ваши тесты работают так, как вы ожидаете, они добавят в следующую строку функцию Expect ()

. Если вы используете waitFor, вы должны поместить ожидание для того же элемента сразу после ожидания из-за вышеуказанного,Возможно, попробуйте настроить ваш тест следующим образом:

it('should go on the payment history view', async () => {
  await element(by.id('product-tab-2')).tap();
  await waitFor(element(by.id('product-payment-history-1')))
    .toBeVisible()
    .withTimeout(5000);
  await expect(element(by.id('product-payment-history-1'))).toBeVisible();
  await expect(element(by.id('product-payment-history'))).toBeVisible();
});

Это позволит избежать продолжения теста и поиска следующего элемента без отображения элемента waitFor

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