【问题标题】:Mixing jest expect with detox expect混合玩笑期待与排毒期待
【发布时间】:2018-12-21 08:52:48
【问题描述】:

如何混合 Jest expect 和 Detox expect?这是我尝试做的。看来expect 已经覆盖了expect 的玩笑。

await mockServer.mockAnyResponse({
    httpRequest: {
      method: 'POST', 
      path: '/api/register',
    },
    httpResponse: {
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        token: 'xxx',
      }),
    }
});

await element(by.id('name')).typeText('Robert');
await element(by.id('password')).typeText('123456');
await element(by.id('register')).tap();

// Check if endpoint has been called
let result = await mockServer.checkIfRegisterEndPointHasBeenCalled();
expect(result).toBe(true); // <-- how to do something like this?

【问题讨论】:

  • 你有没有找到一个好的解决方案?

标签: react-native jestjs detox


【解决方案1】:

这分两步完成:

  1. 当你使用detox.init()时,传递一个错误的initGlobals参数,例如:detox.init({ initGlobals: false })。这将禁用覆盖全局变量,例如 Jest 的 expect
  2. 通过const { device, expect } = require('detox'); 或类似的 ES6 导入使用 detox 公共变量。

【讨论】:

  • 节点仍然不支持 ES6 导入,您必须为此 Babel 进行测试,这会使设置变得非常复杂。
  • 文档显示detox.init(config, {initGlobals: false});。这与detox.init({ initGlobals: false }) 的结果是否相同,还是其中一个错误?
【解决方案2】:

另一种选择是忽略 Detox 覆盖 expect 的事实,并以不同的名称重新导入 Jest 的 expect

const jestExpect = require('expect');

【讨论】:

    【解决方案3】:

    不确定这对于更有经验的“测试人员”是否显而易见,但其他两个答案只是部分正确,并且遗漏了一些我有点麻烦的东西:当你尝试访问时,你会得到 undefinedrequire expect 全局,你必须在测试中这样做。

    因此,您必须执行以下操作:
    init.js 文件中:

    before(async () => {
      await detox.init(config, {initGlobals: false});
    });
    

    在您的测试文件中 - 实际的it(带有const)或before(带有let jestExpectdescribe):

    jestExpect = require('expect');
    

    【讨论】:

      猜你喜欢
      • 2020-04-26
      • 2020-10-01
      • 1970-01-01
      • 2020-01-27
      • 2018-06-11
      • 2019-06-28
      • 2018-08-23
      • 2022-01-13
      • 1970-01-01
      相关资源
      最近更新 更多