【问题标题】:Before test runs, fails on CCI pipeline: "TypeError: Cannot read property 'createEvent' of null"在测试运行之前,在 CCI 管道上失败:“TypeError:无法读取属性‘createEvent’ of null”
【发布时间】:2022-01-11 23:34:30
【问题描述】:

我已尝试研究与此错误消息类似的其他主题(例如来自hereherehere 等):

TypeError: 无法读取 null 的属性“createEvent”

在我们的测试套件中,我们有很多模拟网络调用作为单个模拟层,但是有一个 throw new Error('unexpected URL') 处理丢失调用的处理程序。 此外,我已经验证了我的所有 ReactTesting findBy 查询都使用 async/await 语法正确声明。有时测试有效,有时失败。

真正令人好奇的是,错误仅在 Circle CI 中发生,在任何测试运行之前,它会根据错误消息调用堆栈显示:

#!/bin/bash -eo pipefail
yarn test:ci
yarn run v1.22.11
$ jest --ci --runInBand
/home/circleci/project/node_modules/react-dom/cjs/react-dom.development.js:3905
      var evt = document.createEvent('Event');
                         ^

TypeError: Cannot read property 'createEvent' of null
    at Object.invokeGuardedCallbackDev (/home/circleci/project/node_modules/react-dom/cjs/react-dom.development.js:3905:26)
    at invokeGuardedCallback (/home/circleci/project/node_modules/react-dom/cjs/react-dom.development.js:4056:31)
    at flushPassiveEffectsImpl (/home/circleci/project/node_modules/react-dom/cjs/react-dom.development.js:23543:11)
    at unstable_runWithPriority (/home/circleci/project/node_modules/react-dom/node_modules/scheduler/cjs/scheduler.development.js:468:12)
    at runWithPriority$1 (/home/circleci/project/node_modules/react-dom/cjs/react-dom.development.js:11276:10)
    at flushPassiveEffects (/home/circleci/project/node_modules/react-dom/cjs/react-dom.development.js:23447:14)
    at Object.<anonymous>.flushWork (/home/circleci/project/node_modules/react-dom/cjs/react-dom-test-utils.development.js:992:10)
    at Immediate.<anonymous> (/home/circleci/project/node_modules/react-dom/cjs/react-dom-test-utils.development.js:1003:11)
    at processImmediate (internal/timers.js:464:21)
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

Exited with code exit status 1
CircleCI received exit code 1

我没有在本地看到这个错误,即使运行与我的 Circle CI 命令相同的命令。

关于这个的任何想法,除了未处理

【问题讨论】:

  • 也许你还需要检查所有的 api 是否在测试过程中除了 async/await 来进行 findBy 查询

标签: jestjs react-testing-library circleci


【解决方案1】:

你可以试试这个。 async() await 并使用 expect() 函数并通过新的错误对象捕获执行。

it("Should ...", async () => {
  await myFn(async () => {
    // some operations
    expect(await element.length).toBe(10).toThrow(new Error("something went wrong!"))
  });
});

【讨论】:

    【解决方案2】:

    尝试将 expect(something...) 添加到测试中,如提到的here。 你应该用某种断言来完成你的测试。

    【讨论】:

      猜你喜欢
      • 2021-06-09
      • 2022-10-21
      • 2020-08-13
      • 2020-11-01
      • 2021-04-07
      • 1970-01-01
      • 1970-01-01
      • 2017-10-29
      • 1970-01-01
      相关资源
      最近更新 更多