首页 > 解决方案 > 超时 - 在 jest.setTimeout.Error 指定的 120000 毫秒超时内未调用异步回调

问题描述

detox test -c android.emu.debug抛出如下错误,因为测试用例没有运行。

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

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


  ReferenceError: device is not defined

  1 | describe('Example', () => {
  2 |   beforeEach(async () => {
> 3 |     await device.reloadReactNative();
    |           ^
  4 |   });
  5 | 
  6 |   // it('should have welcome screen', async () => {

  at device (firstTest.spec.js:3:11)


  at device (firstTest.spec.js:3:11)
  at tryCatch (../node_modules/@babel/runtime/node_modules/regenerator- 
  runtime/runtime.js:62:40)
  at Generator.invoke [as _invoke] 
  (../node_modules/@babel/runtime/node_modules/regenerator- 
  runtime/runtime.js:288:22)
  at Generator.prototype.(anonymous function) [as next] 
  (../node_modules/@babel/runtime/node_modules/regenerator- 
  runtime/runtime.js:114:21)
  at tryCatch (../node_modules/@babel/runtime/node_modules/regenerator- 
  runtime/runtime.js:62:40)
  at invoke (../node_modules/@babel/runtime/node_modules/regenerator- 
  runtime/runtime.js:152:20)
  at ../node_modules/@babel/runtime/node_modules/regenerator- 
  runtime/runtime.js:187:11
  at callInvokeWithMethodAndArg 
  (../node_modules/@babel/runtime/node_modules/regenerator- 
  runtime/runtime.js:186:16)
  at AsyncIterator.enqueue 
  (../node_modules/@babel/runtime/node_modules/regenerator- 
  runtime/runtime.js:209:13)
  at AsyncIterator.prototype.(anonymous function) [as next] 
  (../node_modules/@babel/runtime/node_modules/regenerator- 
  runtime/runtime.js:114:21)
  at Object.<anonymous>.runtime.async 
  (../node_modules/@babel/runtime/node_modules/regenerator- 
  runtime/runtime.js:233:14)
  at Object._callee (firstTest.spec.js:2:14)


  ReferenceError: element is not defined

   8 |   // });
   9 | 
  10 |   it('should have splash screen', async () => {
     |                                   ^
  11 |     await expect(element(by.id('splash'))).toBeVisible();
  12 |   });
  13 | 

排毒安装:

npm install detox --save-dev

排毒初始化 -r 开玩笑

它创建了包含三个文件的 e2e 文件夹,如下所示:

fristTest.spec.js

describe('Example', () => {
    beforeEach(async () => {
    await device.reloadReactNative();
});

it('should have welcome screen', async () => {
    await expect(element(by.id('welcome'))).toBeVisible();
});

it('should show hello screen after tap', async () => {
    await element(by.id('hello_button')).tap();
    await expect(element(by.text('Hello'))).toBeVisible();
});

it('should show world screen after tap', async () => {
    await element(by.id('world_button')).tap();
    await expect(element(by.text('World!!!'))).toBeVisible();
});
});

配置文件

{
    "setupTestFrameworkScriptFile": "./init.js",
    "testEnvironment": "node"
}

初始化.js

const detox = require('detox');
const config = require('../package.json').detox;
const adapter = require('detox/runners/jest/adapter');

jest.setTimeout(10000);
jasmine.getEnv().addReporter(adapter);

beforeAll(async () => {
    await detox.init(config);
});

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

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

package.json 下有关 devDependencies 的详细信息

"devDependencies": {
"@babel/core": "^7.3.4",
"@babel/preset-env": "^7.4.2",
"babel-jest": "^24.5.0",
"detox": "^12.0.0",
"detox-expo-helpers": "^0.6.0",
"jest": "^24.5.0",
"metro-react-native-babel-preset": "^0.53.1",
"mocha-react-native": "^0.6.0",
"react-test-renderer": "16.8.3",
"redux-mock-store": "^1.5.3"
},
"jest": {
"preset": "react-native"
},
"detox": {
"runner-config": "e2e/config.json",
"configurations": {
  "android.emu.debug": {
    "binaryPath": "android/app/build/outputs/apk/debug/app-debug.apk",
    "build": "cd android && gradlew assembleDebug assembleAndroidTest - 
 DtestBuildType=debug && cd ..",
    "type": "android.emulator",
    "name": "Nexus_S_API_27"
  },
  "android.emu.release": {
    "binaryPath": "android/app/build/outputs/apk/release/app-release.apk",
    "build": "cd android && ./gradlew assembleRelease assembleAndroidTest 
 -DtestBuildType=release && cd ..",
    "type": "android.attached",
    "name": "Nexus_5X_API_26"
  }
  },
  "test-runner": "jest"
  }

我尝试了很多线程,但对我没有任何帮助。最后从我这边发帖,提前谢谢。

标签: react-nativetestingjestjsdetox

解决方案


推荐阅读