Skh*_*haz 84 javascript typescript reactjs react-testing-library
我有这个简单的测试:
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} />)
})
})
Run Code Online (Sandbox Code Playgroud)
我有一个jest.config.json
包含此内容的
{
"setupFilesAfterEnv": [
"<rootDir>/lib/settings/setupTests.ts"
]
}
Run Code Online (Sandbox Code Playgroud)
我的setupTests.ts
我有
import '@testing-library/jest-dom'
Run Code Online (Sandbox Code Playgroud)
当我运行npm run test
(刚刚运行jest
)时,出现以下错误:
下面的错误可能是由于使用了错误的测试环境导致的,参见 https://jestjs.io/docs/configuration#testenvironment-string。
考虑使用“jsdom”测试环境。
我做错了什么?这在升级之前曾经有效。
Moi*_*obo 189
在您的package.json
, 或jest.config.js
/文件中,将该属性jest.config.ts
的值更改为。testEnvironment
jsdom
package.json
"jest":{
"testEnvironment": "jsdom"
}
Run Code Online (Sandbox Code Playgroud)
jest.config.[js|ts]
module.exports = {
"testEnvironment": "jsdom"
}
Run Code Online (Sandbox Code Playgroud)
如果您使用 jest 28,则需要jest-environment-jsdom
通过以下任一方式单独安装:
节点管理:npm i jest-environment-jsdom --save-dev
纱:yarn add -D jest-environment-jsdom
默认情况下,jest 使用 testEnvironment node
。这本质上使得任何针对浏览器环境的测试都无效。
jsdom
是浏览器环境的实现,支持这些类型的 UI 测试。
对于 Jest 版本 28 及更高版本,jest-environment-jsdom
已从默认jest
安装中删除以减小包大小。
Jos*_*ley 25
@jest-environment
通过在文件开头添加文档块,可以在每个测试文件的基础上解决此问题。例如:
/** @jest-environment jsdom */
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} />)
})
})
Run Code Online (Sandbox Code Playgroud)
如果您的项目混合了 UI 和非 UI 文件,这通常比通过在 package.json 或 Jest 配置中进行设置来更改整个项目更好。"testEnvironment": "jsdom"
通过跳过非 UI 测试的 JSDom 环境初始化,Jest 可以更快地运行测试。事实上,这就是 Jest更改 Jest 27 中默认测试环境的原因。