Jest测试失败,窗口未定义

时间:2017-09-18 08:34:53

标签: webpack jestjs yarnpkg

我正在尝试使用最先进的Web开发学习React / Redux。

现在我坚持让测试运行。出于某种原因,jest失败了

Task :frontend:test 
yarn jest v1.0.2
$ "/Users/gunnar/git/app.oakstair.se/frontend/node_modules/.bin/jest" 
FAIL src/containers/App/App.test.js
  ● Test suite failed to run

 ReferenceError: window is not defined

  at Object.<anonymous> (config/polyfills.js:18:1)
  at next (native)
  at process._tickCallback (internal/process/next_tick.js:109:7)

我谷歌搜索了一段时间没有任何成功......

This is my starting test.js

And this my App  test code

3 个答案:

答案 0 :(得分:43)

在你的package.json中添加window,例如像全球这样的

"jest": {
  "verbose": true,
  "preset": "react-native",
  "setupFiles": ["./jest/setup.js"],
  "testRegex": "(/tests/.*|\\.(test|spec))\\.(ts|tsx|js)$",
  "transformIgnorePatterns": [
    "node_modules/(?!(jest-)?react-native|lottie-react-native)"
  ],
  "globals": {
    "window": true
  }
}

答案 1 :(得分:32)

我有同样的问题,我不相信修改全局变量就是这样做的。问题是因为在我的jest配置中,testEnvironment设置为node时应该jsdom。对我来说,这个设置位于package.json中,由react starter app定义。

答案 2 :(得分:5)

2021 (Jest 27)

Jest 的 testEnvironment 默认值曾经是 jsdom。最近从版本 27 开始更改为 node

您可以在配置文件中设置 testEnvironment: 'jsdom' 以继续使用 JSDOM。

不过,'node' 似乎要快得多,因此您应该尽可能模拟浏览器 API。

https://jestjs.io/blog/2021/05/25/jest-27