React native 使用React导航时排毒测试挂起

React native 使用React导航时排毒测试挂起,react-native,react-navigation,detox,React Native,React Navigation,Detox,我正在我的RN应用程序中使用react导航进行导航。问题是,当我运行detox时,测试只是挂起,但是如果我删除导航并只渲染一个React组件,那么测试就可以正常运行。以下是遵循本指南()之后的日志(使用react navigation时): 运行测试时的终端日志: detox[17781] DEBUG: [DetoxServer.js/CANNOT_FORWARD] role=testee not connected, cannot fw action (sessionId=7f3c526f-b

我正在我的RN应用程序中使用react导航进行导航。问题是,当我运行detox时,测试只是挂起,但是如果我删除导航并只渲染一个React组件,那么测试就可以正常运行。以下是遵循本指南()之后的日志(使用react navigation时):

运行测试时的终端日志:

detox[17781] DEBUG: [DetoxServer.js/CANNOT_FORWARD] role=testee not connected, cannot fw action (sessionId=7f3c526f-ba61-1c9e-8937-d08d09665fba)
detox[17781] DEBUG: [DetoxServer.js/LOGIN] role=testee, sessionId=7f3c526f-ba61-1c9e-8937-d08d09665fba
detox[17781] DEBUG: [DetoxServer.js/LOGIN_SUCCESS] role=testee, sessionId=7f3c526f-ba61-1c9e-8937-d08d09665fba
detox[17781] INFO:  <Login />: should expect email input
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.facebook.react.ShadowQueue
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.facebook.react.ShadowQueue
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync WXRunLoopIdlingResource: React Native thread is busy.
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.facebook.react.ShadowQueue
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync WXRunLoopIdlingResource: React Native thread is busy.
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  <Login />: should expect email input [FAIL]

detox[17781] WARN:  [Client.js/PENDING_REQUESTS] App has not responded to the network requests below:
  (id = 1) 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":"email-input"}]}}]}},"method":"assertWithMatcher:","args":[{"type":"Invocation","value":{"target":{"type":"Class","value":"GREYMatchers"},"method":"matcherForSufficientlyVisible","args":[]}}]}
  (id = -1000) isReady: {}

That might be the reason why the test "<Login /> should expect email input" has timed out.

detox[17781] DEBUG: [DetoxServer.js/DISCONNECT] role=tester, sessionId=7f3c526f-ba61-1c9e-8937-d08d09665fba
detox[17781] DEBUG: [DetoxServer.js/DISCONNECT] role=testee, sessionId=7f3c526f-ba61-1c9e-8937-d08d09665fba
detox[17781] DEBUG: [DetoxServer.js/CANNOT_FORWARD] role=tester not connected, cannot fw action (sessionId=7f3c526f-ba61-1c9e-8937-d08d09665fba)
detox[17781] DEBUG: [DetoxServer.js/WS_CLOSE] Detox server connections terminated gracefully
 FAIL  e2e/screen-navigation.test.js (121.37s)
  <Login />
    ✕ should expect email input (60018ms)

  ● <Login /> › should expect email input

    Timeout - Async callback was not invoked within the 60000ms timeout specified by jest.setTimeout.Error: Timeout - Async callback was not invoked within the 60000ms timeout specified by jest.setTimeout.

      at mapper (../node_modules/jest-jasmine2/build/queueRunner.js:25:45)

  ● <Login /> › should expect email input

    : Timeout - Async callback was not invoked within the 60000ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 60000ms timeout specified by jest.setTimeout.Error:

      12 |   // });
      13 |
    > 14 |   it('should expect email input', async () => {
         |   ^
      15 |     await expect(element(by.id('email-input'))).toBeVisible();
      16 |   });
      17 |

      at new Spec (../node_modules/jest-jasmine2/build/jasmine/Spec.js:116:22)
      at Suite.<anonymous> (screen-navigation.test.js:14:3)
      at Object.<anonymous> (screen-navigation.test.js:2:1)

detox[17778] ERROR: [cli.js] Error: Command failed: node_modules/.bin/jest --config e2e/config.json '--testNamePattern=^((?!:android:).)*$' --maxWorkers 1 e2e

error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
如果我不渲染导航器,只渲染普通的react组件(比如),那么一切都会正常工作(device.launchApp记录到终端后的console.log(“************启动”)。但是如果我呈现Navigator,那么console.log(“************已启动”)不会将日志记录到终端,并且会打印上面粘贴的日志

版本:

  • 反应本机:0.61.5
  • 排毒:16.7.2
  • 笑话:24.9.0
react导航和依赖项:

  • @反应导航/本机:5.6.1
  • @反应导航/堆栈“:5.6.2
  • 反应本机手势处理程序:1.6.1
  • 反应本机屏幕:2.9.0
  • react native Reactivated:1.9.0
  • 反应本地安全区域上下文:3.0.7
  • @react本地社区/屏蔽视图:0.1.10

以下是我在排毒回购上提出的问题:嘿,你能解决这个问题吗?
detox[17781] DEBUG: [DetoxServer.js/CANNOT_FORWARD] role=testee not connected, cannot fw action (sessionId=7f3c526f-ba61-1c9e-8937-d08d09665fba)
detox[17781] DEBUG: [DetoxServer.js/LOGIN] role=testee, sessionId=7f3c526f-ba61-1c9e-8937-d08d09665fba
detox[17781] DEBUG: [DetoxServer.js/LOGIN_SUCCESS] role=testee, sessionId=7f3c526f-ba61-1c9e-8937-d08d09665fba
detox[17781] INFO:  <Login />: should expect email input
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.facebook.react.ShadowQueue
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.facebook.react.ShadowQueue
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync WXRunLoopIdlingResource: React Native thread is busy.
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.facebook.react.ShadowQueue
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync WXRunLoopIdlingResource: React Native thread is busy.
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  [actions.js] Sync JavaScript Timers: Javascript Timers
detox[17781] INFO:  [actions.js] Sync Dispatch Queue: com.apple.main-thread
detox[17781] INFO:  <Login />: should expect email input [FAIL]

detox[17781] WARN:  [Client.js/PENDING_REQUESTS] App has not responded to the network requests below:
  (id = 1) 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":"email-input"}]}}]}},"method":"assertWithMatcher:","args":[{"type":"Invocation","value":{"target":{"type":"Class","value":"GREYMatchers"},"method":"matcherForSufficientlyVisible","args":[]}}]}
  (id = -1000) isReady: {}

That might be the reason why the test "<Login /> should expect email input" has timed out.

detox[17781] DEBUG: [DetoxServer.js/DISCONNECT] role=tester, sessionId=7f3c526f-ba61-1c9e-8937-d08d09665fba
detox[17781] DEBUG: [DetoxServer.js/DISCONNECT] role=testee, sessionId=7f3c526f-ba61-1c9e-8937-d08d09665fba
detox[17781] DEBUG: [DetoxServer.js/CANNOT_FORWARD] role=tester not connected, cannot fw action (sessionId=7f3c526f-ba61-1c9e-8937-d08d09665fba)
detox[17781] DEBUG: [DetoxServer.js/WS_CLOSE] Detox server connections terminated gracefully
 FAIL  e2e/screen-navigation.test.js (121.37s)
  <Login />
    ✕ should expect email input (60018ms)

  ● <Login /> › should expect email input

    Timeout - Async callback was not invoked within the 60000ms timeout specified by jest.setTimeout.Error: Timeout - Async callback was not invoked within the 60000ms timeout specified by jest.setTimeout.

      at mapper (../node_modules/jest-jasmine2/build/queueRunner.js:25:45)

  ● <Login /> › should expect email input

    : Timeout - Async callback was not invoked within the 60000ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 60000ms timeout specified by jest.setTimeout.Error:

      12 |   // });
      13 |
    > 14 |   it('should expect email input', async () => {
         |   ^
      15 |     await expect(element(by.id('email-input'))).toBeVisible();
      16 |   });
      17 |

      at new Spec (../node_modules/jest-jasmine2/build/jasmine/Spec.js:116:22)
      at Suite.<anonymous> (screen-navigation.test.js:14:3)
      at Object.<anonymous> (screen-navigation.test.js:2:1)

detox[17778] ERROR: [cli.js] Error: Command failed: node_modules/.bin/jest --config e2e/config.json '--testNamePattern=^((?!:android:).)*$' --maxWorkers 1 e2e

error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
const detox = require('detox');
const config = require('../package.json').detox;
const adapter = require('detox/runners/jest/adapter');
const specReporter = require('detox/runners/jest/specReporter');

// Set the default timeout
jest.setTimeout(60 * 1000);

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 () => {
  console.log('**********INITSTART'); // --------------> this is logged
  await detox.init(config, { launchApp: false });
  console.log('**********INITDONE'); // --------------> this is logged
  await device.launchApp({
    newInstance: true,
    launchArgs: {
      detoxPrintBusyIdleResources: 'YES',
    },
  });
  console.log('**********LAUNCHED'); // ------------> this is not logged
});

beforeEach(async () => {
  await adapter.beforeEach();
});

afterAll(async () => {
  await adapter.afterAll();
  await detox.cleanup();
});