Это касается детокс-тестов e2e. Я запускаю свои тесты, каждый под it('xx', async => { await...});
Тесты написаны таким образом, что 1-й тест будет входить в систему, 2-й тест будет делать что-то на главной странице, 3-й тест будет переходить с домашней страницы на другие страницы и так далее.
Проблема здесь в том, что как только мой первый тест выполняется, приложение выходит из системы, и все последовательные тесты терпят неудачу. Но когда я включаю все шаги (от входа в систему до желаемой функциональности) в каждом тесте, пакет работает правильно.
Я хотел бы знать, почему это происходит. Есть ли связь с асинхронной функцией?
ах! Бинго. Точно. В одном из моих файлов есть функция beforeEach. Там я добавил файл reloadReactNative. Совсем пропустил. Спасибо.





Одним из недостатков использования Detox является то, что в спецификации тестовых образцов используется beforeEach, и существует тенденция дословно копировать примеры, которые нам дают, иногда пропуская то, что нужно либо удалить, либо добавить.
В данном конкретном случае в beforeEach есть вызов await device.reloadReactNative();, эта команда перезагружает устройство, как если бы вы нажали CMD+R (на iOS) или RR (на Android). Это означает, что элементы, которые были сохранены в состояние, теряются, и приложение практически возвращается в исходное состояние.
Проверьте свой код на наличие оскорбительной строки, вы можете увидеть это в приведенном ниже примере. Если вы удалите эту строку, React Native перестанет перезагружаться на вашем устройстве перед каждым тестом.
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();
});
});
Вы звоните
await device.reloadReactNative();в любой момент? Вы можете поделиться кодом одного из ваших файлов*.spec.js?