我正在尝试设置 detox在我的应用程序上运行 e2e 测试(react native + 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(); 
}); 

该问题可在此 repo 中重现: 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 中说我们可以禁用 EarlGrey's network synchronization mechanism通过提供正则表达式跳过某些 URL,在首选端点上建立机制。

例如,

  beforeAll(async () => { 
    await device.setURLBlacklist([ 
      '.*10\.4\.12\.38.*' 
    ]); 
  }); 

至少对我来说是这样 - 请让我知道这是否有效。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!