【问题标题】:What is --env=jsdom什么是 --env=jsdom
【发布时间】:2019-01-27 22:32:24
【问题描述】:

我正在使用命令 jest 为我的 react-native 应用程序运行我的测试套件。

测试将在文件jest-runtime/build/index.js 中失败

const wrapper = this._environment.runScript(transformedFile.script)[
(_script_transformer || _load_script_transformer()).default.EVAL_RESULT_VARIABLE];

出现错误:

TypeError: Cannot read property 'Object.<anonymous>' of null

我的笑话版本是21.2.1

无论如何,经过一番谷歌搜索,我发现有人在运行jest --env=jsdom。我试了一下,然后我的测试套件开始工作了。

但是这个选项是什么意思呢?

我知道jsdom 是 DOM 和 HTML 标准的实现。

但这玩笑有什么用呢? 这如何改变 jest 的行为以使现在测试通过?

【问题讨论】:

  • 您是否覆盖了testEnvironment 属性? jestjs.io/docs/en/configuration#testenvironment-string。这将更改使用的默认 jsdom 库。 CLI 具有更高的优先级,并会覆盖该值并使其工作。 Jsdom 是必需的,因为它是用于测试组件的无头浏览器。
  • 如果你在 react 中工作,它会更新虚拟 dom,而不是真实 dom。开玩笑没有反应,我认为这只是从什么 dom 读取的额外信息。但是,我不能说这是 100% 确定的..

标签: javascript react-native jestjs jsdom


【解决方案1】:

因为 jest 是一个节点模块,并且在您的本地机器(或 CI 环境)上执行而不是在浏览器中,所以它在节点上下文中运行。这意味着您可以在浏览器上下文中访问的全局变量,例如 windowdocument 不可用。因此,如果您在代码中访问这些全局对象(或任何其他浏览器特定功能,例如 localStorage),您的测试将不得不失败。 option --env=jsdom 确保为您的测试提供模拟浏览器环境,从而允许它们通过。

【讨论】:

    猜你喜欢
    • 2012-07-22
    • 2019-02-18
    • 2018-03-08
    • 1970-01-01
    • 2021-01-05
    • 2011-05-05
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多