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

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

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

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

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

Вы звоните await device.reloadReactNative(); в любой момент? Вы можете поделиться кодом одного из ваших файлов *.spec.js?

Andrew 30.01.2019 12:46

ах! Бинго. Точно. В одном из моих файлов есть функция beforeEach. Там я добавил файл reloadReactNative. Совсем пропустил. Спасибо.

Siva 30.01.2019 14:31
Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
0
2
1 146
1

Ответы 1

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

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

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

пример.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();
  });
});

Другие вопросы по теме