我们正在利用 detox--args -detoxServer ... -detoxSessionId ...
在 iOS 命令行上调用您的二进制文件并{ detoxServer: ..., detoxSessionId: ... }
在 android 的 InstrumentationRegistry 中设置这一事实。
我们目前将其暴露给 JS 的方式对于 StackOverflow 答案来说有点多,但这里有一些示例代码,连同 react native 的文档应该可以让你到达那里 - 对于 Android:
// This will throw ClassNotFoundException if not running under any test,
// but it still might not be running under Detox
Class<?> instrumentationRegistry = Class.forName("android.support.test.InstrumentationRegistry");
Method getArguments = instrumentationRegistry.getMethod("getArguments");
Bundle argumentsBundle = (Bundle) getArguments.invoke(null);
// Say you're in your BaseJavaModule.getConstants() implementation:
return Collections.<String, Object>singletonMap("isDetox", null != argumentsBundle.getString("detoxServer"));
在 iOS 上,类似(没有 Objective-C 编译器 ATM):
return @{@"isDetox": [[[NSProcessInfo processInfo] arguments] containsObject: @"-detoxServer"]}
请注意,也可以使用 detox 添加您自己的参数:
detox.init(config, { launchApp: false });
device.launchApp({ newInstance: true, launchArgs: {
myCustomArg: value,
...,
} });
在某个时候将其完善为一个模块会很棒。