这与排毒e2e测试有关。 我正在运行测试,每个测试都在it('xx',async => {await ...});
这些测试脚本的编写方式是:第一个测试将登录,第二个测试将在主页上执行某些操作,第三个测试将从主页导航到其他页面,依此类推。
这里的问题是,执行我的第一个测试后,该应用程序将立即注销,并且所有连续测试均失败。 但是,当我在每个测试中都包括所有步骤(从登录到所需功能)时,套件就可以正常工作。
我想知道为什么会这样。异步功能有关系吗?
答案 0 :(得分:1)
使用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();
});
});