使用玩笑超时错误排毒:“分配给未定义”

时间:2020-07-22 09:33:38

标签: react-native jestjs detox jest-circus

我正在尝试使用jest和jest-circus将排毒添加到我的ReactNative应用程序中,但是我目前正在努力使其工作。最新版本从零开始增加了排毒,开玩笑和开玩笑的马戏团。

启动测试时,构建成功后,它会启动模拟器,但会在第一个测试时挂起,并因超时和is assigned to undefined错误而停止。似乎找不到模拟器,但它可以正确运行,并且卸载/安装应用程序进程也可以正常工作。

这是代码。

environment.js

const {
  DetoxCircusEnvironment,
  SpecReporter,
  WorkerAssignReporter,
} = require('detox/runners/jest-circus')

class CustomDetoxEnvironment extends DetoxCircusEnvironment {
  constructor(config) {
    super(config)

    // Can be safely removed, if you are content with the default value (=300000ms)
    this.initTimeout = 30000

    // This takes care of generating status logs on a per-spec basis. By default, Jest only reports at file-level.
    // This is strictly optional.
    this.registerListeners({
      SpecReporter,
      WorkerAssignReporter,
    })
  }
}

module.exports = CustomDetoxEnvironment

config.json 开玩笑

{
    "testEnvironment": "./environment",
    "testRunner": "jest-circus/runner",
    "testTimeout": 120000,
    "testRegex": "\\.spec\\.js$",
    "reporters": ["detox/runners/jest/streamlineReporter"],
    "verbose": true
}

.detoxrc.json

{
  "testRunner": "jest",
  "runnerConfig": "test/tdd/config.json",
  "specs": "test/tdd",
  "configurations": {
    "ios.sim.release": {
      "binaryPath": "ios/build/Build/Products/Release-iphonesimulator/BetaSeriesNative.app",
      "build": "export RCT_NO_LAUNCH_PACKAGER=true && xcodebuild -workspace ios/BetaSeriesNative.xcworkspace -UseNewBuildSystem=NO -scheme BetaSeriesNative -configuration Release -sdk iphonesimulator -derivedDataPath ios/build -quiet",
      "type": "ios.simulator",
      "device": {
        "type": "iPhone 8"
      },
      "artifacts": {
        "pathBuilder": "./test/tdd/detox.pathbuilder.ios.js"
      }
    }
  }
}

login.spec.js测试

describe('When on the incentive page', () => {
  beforeEach(async () => {
    await device.reloadReactNative()
  })

  it('it should open the login view', async () => {
    await expect(element(by.id('LoginView'))).toBeVisible()
    await expect(element(by.id('LoginView_button'))).toBeVisible()
    await element(by.id('LoginView_button')).tap()

    await expect(element(by.id('LoginView_form'))).toBeVisible()
  })
})

这是错误。

enter image description here

谢谢!

1 个答案:

答案 0 :(得分:1)

好吧,看来我找到了问题的根源。

我在await device.disableSynchronization()钩中添加了await device.reloadReactNative(),并删除了beforeEach

我还评论了我的应用程序中的许多代码,并结束了在我的第一个主页视图渲染中返回null的操作。

我当然尝试仅在渲染中返回null而不在测试中添加/删除这些行,但是如果没有它,它仍然不起作用。

奇怪的事情。有时在启动测试时它仍然挂起,并且我仍然遇到与以前相同的错误:is assigned to undefined。当我重新启动它时,有时它的工作原理类似于下面的屏幕截图。我想说的是现在它可以工作了,大概是三分之二。也许我的应用程序中仍然有一些代码正在挂起测试,然后超时,所以我会继续寻找。

无论如何,我认为更好的错误或者可能是来自其他地方或应用程序本身的警告可能更好地理解这种错误。即使启用了调试和详细说明,现在仍不清楚该错误的来源是什么。

希望它将对你们中的某些人有所帮助。 干杯。

屏幕快照中的P.S我的测试仍然失败,因为我没有编辑测试,但至少它正在运行测试:)

enter image description here