Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detox: Waiting for network requests to finish timeout

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.
like image 604
clems36 Avatar asked Sep 03 '19 10:09

clems36


1 Answers

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.

like image 172
tkleiven Avatar answered Oct 31 '22 19:10

tkleiven