I'm trying to set up detox to run e2e tests on my app (react native + expokit). As i had mentioned in https://github.com/wix/Detox/issues/1627, my test keeps timing out with
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"
)
I've added those urls to detoxURLBlacklistRegex
but it doesn't do the trick. As I said in https://github.com/wix/Detox/issues/1627 i thought disabling live reload would make the tests pass but it is not always the case - sometimes it does, sometimes it times out. Here's my 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();
});
The issue is repoducible in this repo: https://github.com/clems36/detox-test
Here's the trace:
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.
Have you tried to escape special characters? It says in the detox docs that we can disable EarlGrey's network synchronization mechanism mechanism on preferred endpoints by providing regular expressions to skip over certain URLs.
For example,
beforeAll(async () => {
await device.setURLBlacklist([
'.*10\.4\.12\.38.*'
]);
});
At least that was the case for me - please let me know if that works.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With