排毒测试正在打破

时间:2019-01-30 11:17:25

标签: react-native automated-tests e2e-testing detox

这与排毒e2e测试有关。 我正在运行测试,每个测试都在it('xx',async => {await ...});

这些测试脚本的编写方式是:第一个测试将登录,第二个测试将在主页上执行某些操作,第三个测试将从主页导航到其他页面,依此类推。

这里的问题是,执行我的第一个测试后,该应用程序将立即注销,并且所有连续测试均失败。 但是,当我在每个测试中都包括所有步骤(从登录到所需功能)时,套件就可以正常工作。

我想知道为什么会这样。异步功能有关系吗?

1 个答案:

答案 0 :(得分:1)

使用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();
  });
});