获取应用二进制未找到错误排毒测试

时间:2019-06-16 12:48:32

标签: react-native detox

运行detox test时出错

下面是我的Package.json

{
  "name": "TDD",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start",
    "test": "jest tests/**/*.spec.js"
  },
  "dependencies": {
    "react": "16.8.3",
    "react-native": "0.59.9"
  },
  "devDependencies": {
    "@babel/core": "^7.4.5",
    "@babel/runtime": "^7.4.5",
    "babel-jest": "^24.8.0",
    "detox": "^12.11.1",
    "enzyme": "^3.10.0",
    "enzyme-adapter-react-16": "^1.14.0",
    "jest": "^24.8.0",
    "metro-react-native-babel-preset": "^0.54.1",
    "react-test-renderer": "16.8.3"
  },
  "jest": {
    "preset": "react-native",
    "setupFiles": [
      "./tests/setup.js"
    ]
  },
  "detox": {
    "test-runner": "jest",
    "configurations": {
      "ios.sim.debug": {
        "binaryPath": "ios/build/Build/Products/Debug-iphonesimulator/TDD.app",
        "build": "xcodebuild -project ios/TDD.xcodeproj -scheme TDD -configuration Debug -sdk iphonesimulator -derivedDataPath ios/build",
        "type": "ios.simulator",
        "name": "iPhone X"
      }
    }
  }
}

出现以下错误:

detox[11148] INFO:  [test.js] configuration="ios.sim.debug" artifactsLocation="artifacts/ios.sim.debug.
2019-06-16 12-34-53Z" recordLogs="none" takeScreenshots="manual" recordVideos="none" recordPerformance=
"none" reportSpecs=true node_modules/.bin/jest --config=e2e/config.json --maxWorkers=1 '--testNamePatte
rn=^((?!:android:).)*$' "e2e"

detox[11149] INFO:  [DetoxServer.js] server listening on localhost:50040...

detox[11149] ERROR: [index.js/DETOX_INIT_ERROR] 

Error: app binary not found at ‘/path/TDD/ios/build/Build/Products/Debug-iphonesimulator/TDD.app', did you build it?
    at Device._getAbsolutePath (/path/TDD/node_modules/detox/src/devices/Device.js:249:13)
    at Device.prepare (/path/TDD/node_modules/detox/src/devices/Device.js:18:29)
    at Detox.init (/path/TDD/node_modules/detox/src/Detox.js:70:23)
    at process._tickCallback (internal/process/next_tick.js:68:7)
Example: should show the welcome message
Example: should show the welcome message [FAIL]

 FAIL  e2e/firstTest.spec.js
  Example
    ✕ should show the welcome message (3ms)

  ● Example › should show the welcome message

    app binary not found at ‘/path/TDD/ios/build/Build/Products/Debug-iphonesimulator/TDD.app', did you build it?

      at Device._getAbsolutePath (../node_modules/detox/src/devices/Device.js:249:13)
      at Device.prepare (../node_modules/detox/src/devices/Device.js:18:29)
      at Detox.init (../node_modules/detox/src/Detox.js:70:23)

  ● Example › should show the welcome message

    ReferenceError: device is not defined

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

      at device (firstTest.spec.js:3:11)
      at tryCatch (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:45:40)
      at Generator.invoke [as _invoke] (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:271:22)
      at Generator.prototype.(anonymous function) [as next] (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:97:21)
      at tryCatch (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:45:40)
      at invoke (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:135:20)
      at ../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:170:11
      at callInvokeWithMethodAndArg (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:169:16)
      at AsyncIterator.enqueue (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:192:13)
      at AsyncIterator.prototype.(anonymous function) [as next] (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:97:21)
      at Object.<anonymous>.exports.async (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:216:14)
      at Object._callee (firstTest.spec.js:2:14)

  ● Example › should show the welcome message

    ReferenceError: element is not defined

      4 |   });
      5 | 
    > 6 |   it('should show the welcome message', async () => {
        |                                         ^
      7 |     await expect(element(by.id('welcome'))).toBeVisible();
      8 |   });
      9 | });

      at _callee2$ (firstTest.spec.js:6:41)
      at tryCatch (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:45:40)
      at Generator.invoke [as _invoke] (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:271:22)
      at Generator.prototype.(anonymous function) [as next] (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:97:21)
      at tryCatch (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:45:40)
      at invoke (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:135:20)
      at ../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:170:11
      at callInvokeWithMethodAndArg (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:169:16)
      at AsyncIterator.enqueue (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:192:13)
      at AsyncIterator.prototype.(anonymous function) [as next] (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:97:21)
      at Object.<anonymous>.exports.async (../node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js:216:14)
      at Object._callee2 (firstTest.spec.js:6:41)

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

e2e-> init.js

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(120000);
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);
});

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

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

firstTest.Spec.js

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

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

1 个答案:

答案 0 :(得分:0)

如果您可以成功运行detox build,请尝试执行以下操作:

  1. 检查构建的输出二进制文件是否在package.json中的binaryPath中指定的目录中
  2. 在Xcode中更改应用的显示名称,并在binaryPath中进行相应的更改
  3. 运行detox builddetox test
  4. 在Xcode和package.json中更改应用的显示名称
  5. 运行detox builddetox test

对我有用