我正在尝试设置detox在我的应用程序上运行e2e测试(反应本机+ expokit)。
正如我在https://github.com/wix/Detox/issues/1627中提到的那样,我的测试一直在与
Waiting for network requests to finish.: (
"http://10.4.12.38:19001/symbolicate",
"http://10.4.12.38:19001/symbolicate",
"http://10.4.12.38:19001/symbolicate",
"http://10.4.12.38:19001/symbolicate",
"http://10.4.12.38:19001/onchange"
)
我已经将这些网址添加到
detoxURLBlacklistRegex
中,但是并不能解决问题。正如我在https://github.com/wix/Detox/issues/1627中所说,我认为禁用实时重新加载会使测试通过,但并非总是这种情况-有时会发生,有时会超时。这是我的init.js
:const detox = require('detox');
const adapter = require('detox/runners/jest/adapter');
const specReporter = require('detox/runners/jest/specReporter');
const config = require('../package.json').detox;
// Set the default timeout
jest.setTimeout(30000);
jasmine.getEnv().addReporter(adapter);
// This takes care of generating status logs on a per-spec basis. By default, jest only reports at file-level.
// This is strictly optional.
jasmine.getEnv().addReporter(specReporter);
beforeAll(async () => {
await detox.init(config, {
launchApp: false,
});
await device.launchApp({
permissions: { notifications: 'YES' },
launchArgs: {
detoxPrintBusyIdleResources: 'YES',
detoxURLBlacklistRegex:
'.*://10.4.12.38.*',
},
});
});
beforeEach(async () => {
await adapter.beforeEach();
});
afterAll(async () => {
await adapter.afterAll();
await detox.cleanup();
});
此存储库中可以复制该问题:https://github.com/clems36/detox-test
这是跟踪:
detox[55327] TRACE: [Detox.js/DETOX_BEFORE_EACH] running test: "Example should show hello screen after tap"
detox[55327] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onBeforeEach({
title: 'should show hello screen after tap',
fullName: 'Example should show hello screen after tap',
status: 'running'
})
detox[55327] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"reactNativeReload","params":{},"messageId":-1000}
detox[55327] TRACE: [DetoxServer.js/MESSAGE] role=tester action=reactNativeReload (sessionId=6ee3a6df-152d-a069-f95a-ecd53e7fc872)
detox[55327] TRACE: [AsyncWebSocket.js/WEBSOCKET_SEND] {"type":"invoke","params":{"target":{"type":"Invocation","value":{"target":{"type":"EarlGrey","value":"instance"},"method":"detox_selectElementWithMatcher:","args":[{"type":"Invocation","value":{"target":{"type":"Class","value":"GREYMatchers"},"method":"matcherForAccessibilityID:","args":[{"type":"NSString","value":"hello_button"}]}}]}},"method":"performAction:","args":[{"type":"Invocation","value":{"target":{"type":"Class","value":"GREYActions"},"method":"actionForTap","args":[]}}]},"messageId":2}
detox[55327] TRACE: [DetoxServer.js/MESSAGE] role=tester action=invoke (sessionId=6ee3a6df-152d-a069-f95a-ecd53e7fc872)
Example: should show hello screen after tap [FAIL]
Example: should show world screen after tap
detox[55327] TRACE: [Detox.js/DETOX_AFTER_EACH] failed test: "Example should show hello screen after tap"
detox[55327] TRACE: [ArtifactsManager.js/LIFECYCLE] artifactsManager.onAfterEach({
title: 'should show hello screen after tap',
fullName: 'Example should show hello screen after tap',
status: 'failed',
timedOut: true
})
detox[55327] WARN: [Client.js/PENDING_REQUESTS] App has not responded to the network requests below:
(id = 2) invoke: {"target":{"type":"Invocation","value":{"target":{"type":"EarlGrey","value":"instance"},"method":"detox_selectElementWithMatcher:","args":[{"type":"Invocation","value":{"target":{"type":"Class","value":"GREYMatchers"},"method":"matcherForAccessibilityID:","args":[{"type":"NSString","value":"hello_button"}]}}]}},"method":"performAction:","args":[{"type":"Invocation","value":{"target":{"type":"Class","value":"GREYActions"},"method":"actionForTap","args":[]}}]}
(id = -1000) reactNativeReload: {}
That might be the reason why the test "Example should show hello screen after tap" has timed out.
最佳答案
您是否尝试过转义特殊字符?它说在detox docs中,我们可以通过提供正则表达式跳过某些URL来在首选端点上禁用EarlGrey's network synchronization mechanism机制。
例如,
beforeAll(async () => {
await device.setURLBlacklist([
'.*10\.4\.12\.38.*'
]);
});
至少对我来说就是这种情况-请告诉我是否可行。