Детокс тесты ломаются - PullRequest
       27

Детокс тесты ломаются

0 голосов
/ 30 января 2019

Это касается тестов на детокс e2e.Я запускаю свои тесты, каждый из которых находится под it ('xx', async => {await ...});

Тесты составлены таким образом, что 1-й тест будет входить в систему, 2-й тест будетсделать что-то на домашней странице, 3-й тест будет переходить с домашней страницы на другие страницы и так далее.

Проблема здесь в том, что как только мой первый тест выполняется, приложение выходит из системы и все последующие тесты не выполняются.Но когда я включаю все этапы (от входа в систему до нужной функциональности) в каждом тесте, комплект работает правильно.

Я хотел бы знать, почему это происходит.Есть ли связь с асинхронной функцией?

1 Ответ

0 голосов
/ 30 января 2019

Один из недостатков использования Detox заключается в том, что в примере спецификации теста используется beforeEach, и существует тенденция копировать дословные примеры, которые нам даны, иногда пропуская то, что либо нужно удалить, либо добавить,

В этом конкретном случае в beforeEach происходит вызов await device.reloadReactNative();, эта команда перезагружает устройство, как если бы вы нажали CMD+R (на iOS) или RR (на Android).Это означает, что элементы, которые были сохранены в состояние, теряются, и приложение в значительной степени возвращается в исходное состояние.

Проверьте свой код на наличие ошибочной строки, вы можете увидеть его в приведенном ниже примере.Если вы удалите эту строку, то перед каждым тестом она перестанет загружать React Native на ваше устройство.

example.spec.js

https://github.com/wix/Detox/blob/master/examples/demo-react-native/e2e/example.spec.js

describe('Example', () => {
  beforeEach(async () => {
    await device.reloadReactNative(); // <- this is the problem
  });

  it('should have welcome screen', async () => {
    await expect(element(by.id('welcome'))).toBeVisible();
  });

  it('should show hello screen after tap', async () => {
    await element(by.id('hello_button')).tap();
    await expect(element(by.text('Hello!!!'))).toBeVisible();
  });

  it('should show world screen after tap', async () => {
    await element(by.id('world_button')).tap();
    await expect(element(by.text('World!!!'))).toBeVisible();
  });
});
...