我有个简单的测试
import React from 'react'
import { render } from '@testing-library/react'
import Button from '.'
describe('Button', () => {
it('renders button without crashing', () => {
const label = 'test'
render(<Button label={label} />)
})
})
我有一个包含以下内容的jest.config.json
{
"setupFilesAfterEnv": [
"<rootDir>/lib/settings/setupTests.ts"
]
}
在我的setupTests.ts
上
import '@testing-library/jest-dom'
当我运行npm run test
(它只运行jest
)时,我得到了以下错误:
下面的错误可能是由于使用了错误的测试环境引起的,请参阅https://jestjs.io/docs/configuration#testenvironment-string。
考虑使用“jsdom”测试环境。
我做错了什么?在升级之前,这个曾经工作过。
4条答案
按热度按时间sqserrrh1#
在
package.json
或jest.config.js
/jest.config.ts
文件中,将testEnvironment
属性的值更改为jsdom
。package.json
∮ ∮ ∮ ∮
jest.config.[js|ts]
重要笑话〉28
如果您使用的是jest 28,则需要通过以下方式单独安装
jest-environment-jsdom
:国家预防机制:
npm i jest-environment-jsdom --save-dev
Yarn:
yarn add -D jest-environment-jsdom
为什么?
默认情况下,jest使用
node
测试环境,这实际上使得任何针对浏览器环境的测试都无效。jsdom
是浏览器环境的实现,它支持这些类型的UI测试。对于Jest版本28和更高版本,
jest-environment-jsdom
已从默认jest
安装中删除,以减小软件包大小。额外阅读
jest测试环境文档
笑话28打破变化
6pp0gazn2#
这可以通过在每个测试文件的开头添加一个
@jest-environment
docblock来解决。例如:如果你的项目混合了UI和非UI文件,这通常比changing the entire project更好,在你的package.json或Jest配置中设置
"testEnvironment": "jsdom"
。通过跳过为非UI测试初始化JSDom环境,Jest可以更快地运行你的测试。事实上,这就是为什么Jest在Jest 27中改变了默认测试环境。eit6fx6z3#
默认情况下,testEnvironment的值是node,它在node.js环境中运行所有测试用例,但是js-dom提供了类似浏览器的环境。除了添加jsdom值,你甚至可以添加文件特定值,如下面所示。
我们甚至可以添加测试文件特定的环境,请参考此链接.
https://jestjs.io/docs/configuration#testenvironment-string
mitkmikd4#
试试这个。
}