Jest 测试失败,未定义窗口
Posted
技术标签:
【中文标题】Jest 测试失败,未定义窗口【英文标题】:Jest test fails with window is not defined 【发布时间】:2018-02-26 17:32:22 【问题描述】:我正在尝试开始学习最先进的 Web 开发学习 React/Redux。
现在我正忙于让测试运行。出于某种原因,玩笑失败了
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)
我用谷歌搜索了一段时间没有任何成功......
【问题讨论】:
能否请您添加您的测试代码? 我添加了两张图片。我可以将 repo 公开,但它非常大,因为它基于我购买的 react/redux 模板,其中包含很多内容! 你用jsdom运行吗? 【参考方案1】:我遇到了同样的问题,我不认为修改全局变量是解决问题的方法。问题是因为在我的笑话配置中,我将 testEnvironment
设置为 node
,而应该是 jsdom
。对我来说,这个设置位于 react starter 应用程序定义的 package.json 中。
【讨论】:
对于信息jsdom
是默认值(请参阅jestjs.io/docs/en/configuration.html#testenvironment-string),所以除非你已经覆盖它(就像他们在create-react-app
中所做的那样)你应该没问题
如果您需要支持画布,您需要将testEnvironment
设置为environment-jsdom-fourteen
并使用npm install --save-dev jest-environment-jsdom-fourteen
github.com/jsdom/jsdom#canvas-support 安装它
如果你使用 react-native,很可能你正在使用 preset: react-native
jest 配置,它会覆盖默认值以排除 DOM:jestjs.io/docs/en/tutorial-react-native#environment
我也遇到同样的错误,但我正在使用 vue.js,如果有任何建议请帮助我【参考方案2】:
在你的 package.json 中添加 window
像 global 这样的东西
"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":
【讨论】:
这应该是对象而不是布尔变量:``` "window": ``` 不幸的是 create-react-app 不支持以这种方式配置全局变量。有什么建议吗? @Faust 查看 JacksonHaenchen 的回答 这可能会有所帮助,但它无论如何都是一个空对象,所以你没有userAgent
等属性。也许这是一种从jsdom或其他东西映射到这里的对象的方法。会更有帮助【参考方案3】:
2021(开玩笑 27)
Jest 的 testEnvironment
默认值曾经是 jsdom
。最近从版本 27 开始更改为 node
。
您可以在配置文件中设置testEnvironment: 'jsdom'
以继续使用JSDOM。
但是'node'
似乎要快得多,所以您应该尽可能模拟浏览器 API。
https://jestjs.io/blog/2021/05/25/jest-27
【讨论】:
但听起来应该可以在“节点”环境中拥有“窗口”等。是吗?我想通过从 jsdom 切换到节点来加快我的项目,但想知道是否可能,因为我对未定义的“窗口”有同样的问题。【参考方案4】:npm i jest-environment-jsdom
index.test.tsx
/**
* @jest-environment jsdom
*/
【讨论】:
以上是关于Jest 测试失败,未定义窗口的主要内容,如果未能解决你的问题,请参考以下文章
为啥这些 Jest 测试失败了? TypeError:无法读取未定义的属性“应用”