使用 detox 测试 e2e 无法启动 iPhone 模拟器,而是启动 Apple TV

Posted

技术标签:

【中文标题】使用 detox 测试 e2e 无法启动 iPhone 模拟器,而是启动 Apple TV【英文标题】:Testing e2e with detox failing to start iPhone simulator, starts Apple TV instead 【发布时间】:2018-11-28 07:46:04 【问题描述】:

tldr;我有一个 React Native 应用程序,我正在使用工作区。我已经浏览了这个detox getting started 文档,现在我有一个包含 3 个文件(默认)的 e2e 文件夹,以及 package.json 中的配置。

配置看起来像

"detox": 
    "test-runner": "mocha",
    "specs": "e2e",
    "runner-config": "e2e/mocha.opts",
    "configurations": 
        "ios.sim.debug": 
            "binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/MyApp.app",
            "build": "xcodebuild -workspace ios/MyApp.xcworkspace -scheme Staging -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build",
            "type": "ios.simulator",
            "name": "iPhone 6"
        
    

当我运行xcrun simctl list 时,我得到以下列表,其中列出并启动了 iPhone 6。

== Devices ==
-- iOS 11.4 --
    iPhone 5s (E9D0264C-9257-4BE4-8693-4B7AE6AAE97A) (Shutdown)
    iPhone 6 (099D481A-6F6D-4DC9-A379-16DFAE617CA0) (Booted)
    iPhone 6 Plus (7556F239-06F0-421D-A294-AE15BCF6D64D) (Shutdown)
    iPhone 6s (FB65410A-4654-40BB-88B0-234DF3C191DE) (Shutdown)
...
-- tvOS 11.4 --
    Apple TV (9875527D-A6FC-4BD8-965E-255C910E3ABA) (Shutdown)
    Apple TV 4K (0BF2198F-04AF-49CC-B05C-540BB2FB53AF) (Shutdown)
    Apple TV 4K (at 1080p) (8F14FC95-685B-481C-860F-384CBD880D2B) (Shutdown)
...

detox build --configuration ios.sim.debug 运行良好,但是当我运行 detox test --configuration ios.sim.debugdetox builddetox build --reuse 时,它会启动 Apple TV 模拟器并抛出此错误

detox info 11:47:49: server listening on localhost:51379...
detox info 2: Searching for device matching iPhone 6...
detox info 5: Booting device 9875527D-A6FC-4BD8-965E-255C910E3ABA
detox info 7: Terminating com.local.MyApp...
detox ERR! 7: An error was encountered processing the command (domain=com.apple.CoreSimulator.SimError, code=164):
Unable to lookup in current state: Shutting Down, exited with code 164
  1) "before all" hook

  0 passing (9s)
  1 failing

  1) "before all" hook:
     Error: 7: running "/usr/bin/xcrun simctl terminate 9875527D-A6FC-4BD8-965E-255C910E3ABA com.local.MyApp" returned undefined
      at Object.execWithRetriesAndLogs (node_modules/detox/src/utils/exec.js:36:11)
      at <anonymous>
      at process._tickCallback (internal/process/next_tick.js:118:7)



child_process.js:615
    throw err;
    ^

Error: Command failed: node_modules/.bin/mocha e2e --opts e2e/mocha.opts --configuration ios.sim.debug   --reuse  --grep :android: --invert
    at checkExecSyncError (child_process.js:575:11)
    at Object.execSync (child_process.js:612:13)
    at runMocha (/Users/me/code/node_modules/detox/local-cli/detox-test.js:114:6)
    at run (/Users/me/code/node_modules/detox/local-cli/detox-test.js:75:7)
    at Object.<anonymous> (/Users/me/code/node_modules/detox/local-cli/detox-test.js:181:1)
    at Module._compile (module.js:649:30)
    at Object.Module._extensions..js (module.js:660:10)
    at Module.load (module.js:561:32)
    at tryModuleLoad (module.js:501:12)
    at Function.Module._load (module.js:493:3)

您可以在detox info 5: 下看到它开始启动9875527D-A6FC-4BD8-965E-255C910E3ABA,这是Apple TV 设备。

如何配置 detox 来启动 iPhone 模拟器?

【问题讨论】:

我不知道它是否对遇到同样问题的人有帮助,但我必须升级 applesimutils 并清除缓存。 brew update &amp;&amp; brew upgrade applesimutilsdetox clean-framework-cache &amp;&amp; detox build-framework-cache 【参考方案1】:

brew update &amp;&amp; brew upgrade applesimutilsdetox clean-framework-cache &amp;&amp; detox build-framework-cache 正如 Tim Rijavec 所建议的那样,对我的情况有所帮助!隐藏在 cmets 中似乎没有解决此问题的方法。

【讨论】:

【参考方案2】:

在终端中运行这两个命令对我有用

brew update && brew upgrade applesimutils

detox clean-framework-cache && detox build-framework-cache

然后我重新运行了我的 detox build 和 detox test 命令,它仍然没有工作。于是我就跑了。

open -a simulator

在我的 Mac 上,这启动了几个已备份的 ios 模拟器实例,因此看起来发生了一些奇怪的事情,导致模拟器无法真正启动。之后运行的排毒测试开始正确启动模拟器。

【讨论】:

以上是关于使用 detox 测试 e2e 无法启动 iPhone 模拟器,而是启动 Apple TV的主要内容,如果未能解决你的问题,请参考以下文章

React Native E2E w/Detox 错误:“无法在设备上运行应用程序”

在 e2e 测试中的某个点开始使用 Detox 在 react native

使用 detox 对 Toast 动画进行 e2e 测试的更好方法

Detox E2E 测试不会在 react-native 项目上运行

有没有一种方法可以使用 Detox E2E 测试在 FlatList 中找到一个元素

使用来自 bitbar.com 设备农场服务的 Detox e2e 测试库将所有测试用例日志通过电子邮件发送到我的电子邮件