在 iOS 上运行 detox 测试时模拟器无法打开

Posted

技术标签:

【中文标题】在 iOS 上运行 detox 测试时模拟器无法打开【英文标题】:The simulator doesn't open when running detox test on iOS 【发布时间】:2020-11-04 08:56:33 【问题描述】:

当我尝试运行 detox test 时,模拟器似乎没有打开并且测试只是超时。

我确认我的设置是正确的,并尝试this 以确保我的模拟器可以从终端启动,并且我的detox 配置中的设备类型是正确的。

我收到的错误如下。

Timeout - Async callback was not invoked within the 300000ms timeout specified by jest.setTimeout.
Error: Timeout - Async callback was not invoked within the 300000ms timeout specified by jest.setTimeout.

DetoxRuntimeError: Detox instance has not been initialized

HINT: There was an error on attempt to call detox.init()

DetoxRuntimeError: Aborted detox.init() execution, and now running detox.cleanup()

HINT: Most likely, your test runner is tearing down the suite due to the timeout error

这是我的配置,出于隐私原因删除了应用名称。

"ios.sim.debug": 
    "binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/example.app",
    "build": "xcodebuild -workspace ios/example.xcworkspace -scheme example -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build",
    "type": "ios.simulator",
    "device": 
        "type": "iPhone 11 Pro"
    
,

如何调试?

【问题讨论】:

【参考方案1】:

我发现从 Xcode 9 detox 开始以无头模式运行 iOS 模拟器。如果您正在运行测试,然后使用 Spotlight 拉起模拟器并按 Enter 键,那么它将把 detox 已打开的所有模拟器带到前面。

我是从这个comment 发现的。

我还发现我的测试超时的原因是用户需要响应的提示阻止了detox 测试的进行。

【讨论】:

【参考方案2】:

看起来您的测试中没有绑定 detox .init 方法。 确保你有 e2e/init.js 并且你需要添加

before(async () => 
     await detox.init(config);
);

还要确保你在 config.json 中调用这个文件(这里可能是错误的,我在这里使用的是 Mocha 和 mocha.opts)

【讨论】:

感谢您的建议!我确实按照我的设置完全遵循了所有文档,e2e/init.jsconfig.json 等...对我来说,问题最终是 iOS 模拟器在无头模式下运行,所以它可以工作,但我没有看到所以我以为它坏了。 很高兴你想通了

以上是关于在 iOS 上运行 detox 测试时模拟器无法打开的主要内容,如果未能解决你的问题,请参考以下文章

Detox - Android / iOS - 无法在 android 上运行相同的测试

移动模拟器/模拟器 Detox 屏幕截图工件在不同主机上运行时会有所不同

执行“detox test”命令时,iOS 模拟器应用程序无法启动 #2305

无法使用 detox 运行测试用例

获取 ReferenceError:在 react-native ios 上运行 detox 测试时未定义设备

如何在 bitrise 上运行测试用例时查看模拟器