Next.js+TypeScript中Jest断言提示Assertion无对应属性问题求助
解决Next.js+TypeScript中Jest断言类型报错问题
核心问题:版本不兼容
你当前使用的@testing-library/jest-dom@4.2.4与jest@29.7.0版本严重不匹配——v4版本仅支持Jest 24~26,无法适配Jest 29的类型系统,这是导致toBeInTheDocument等断言方法类型报错的根本原因。
解决方案步骤
1. 升级兼容版本的@testing-library/jest-dom
执行以下命令升级到适配Jest 29的最新稳定版(当前为v6.x系列):
npm install @testing-library/jest-dom@latest --save-dev # 或使用yarn yarn add @testing-library/jest-dom@latest --dev
2. 简化jest.setup.ts配置
新版本的@testing-library/jest-dom会自动扩展Jest的断言方法,无需重复导入,修改jest.setup.ts为:
import "@testing-library/jest-dom";
3. 调整tsconfig.json的类型配置
在tsconfig.json的compilerOptions.types中添加@testing-library/jest-dom(新版本自带类型定义,无需额外安装@types包):
"types": ["cypress", "node", "jest", "@testing-library/jest-dom"],
同时可以移除typeRoots中多余的./node_modules/@testing-library配置,默认TypeScript会自动识别包内的类型文件。
4. 验证配置
重启TypeScript语言服务或IDE,运行测试用例,断言方法的类型报错应该会消失。
替代方案(不升级版本的临时处理)
如果暂时无法升级依赖,可以手动扩展Jest的类型定义:
在项目根目录创建jest.d.ts文件,添加如下内容:
import "@testing-library/jest-dom";
并确保该文件被tsconfig.json的include字段包含(你的当前配置已经包含**/*.d.ts,无需额外修改)。
关于jest-without-globals的替代
无需使用该老旧包,升级@testing-library/jest-dom后,全局断言方法即可正常工作,且完全兼容Jest 29。
内容的提问来源于stack exchange,提问作者Daniel Erdos
相关产品推荐
相关产品推荐

