Reactjs 财产';提交文件';不存在于类型';Matchers<;任何>';
我正在尝试为我的simple React应用程序编写测试,该应用程序使用API等为狗收容所创建UI。我已导入下面显示的模块并运行以下命令Reactjs 财产';提交文件';不存在于类型';Matchers<;任何>';,reactjs,testing,jestjs,mocha.js,Reactjs,Testing,Jestjs,Mocha.js,我正在尝试为我的simple React应用程序编写测试,该应用程序使用API等为狗收容所创建UI。我已导入下面显示的模块并运行以下命令 npm install jest-dom react-testing-library --save-dev 然而,我正在得到toBeInTheDocument();方法以红色下划线,并显示错误消息 "Property 'toBeInTheDocument' does not exist on type 'Matchers<any>'.&
npm install jest-dom react-testing-library --save-dev
然而,我正在得到toBeInTheDocument();方法以红色下划线,并显示错误消息
"Property 'toBeInTheDocument' does not exist on type 'Matchers<any>'."
类型“Matchers”上不存在属性“toBeInTheDocument”
import“每次测试后反应测试库/清理”;
导入“jest dom/extend expect”;
从“React”导入*作为React;
从“/PetCard”导入PetCard;
从“/Pet”导入宠物;
从“反应测试库”导入{render};
常数petMock={
id:“225c5957d7f450baec75a67ede427e9”,
名称:“Fido”,
状态:“可用”,
种类:“狗”,
品种:“拉布拉多”,
}作为宠物;
描述(“PetCard”,()=>{
它(“应该呈现名称”,()=>{
const{getByText}=render();
expect(getByText(“Fido”)).toBeInTheDocument();
});
});
对于如何解决此问题的任何建议,我们都非常感谢。如评论中所述,需要更改的是您的eslint配置。您应该更新
eslintrc
文件,以包含测试文件的配置覆盖:
...
overrides: [
{
files: [
"**/*.test.js"
],
env: {
jest: true
}
}
]
其中,“***.test.js”
是与测试文件格式匹配的glob
更改eslintrc
文件可确保不必在每个测试文件的顶部添加eslint env
注释
请参阅此答案作为参考:另请参阅jest环境配置:请确保项目中安装了正确的类型。i、 e
npmi-D@testing library/jest dom@^4.2.4
根据我的经验,5.x版似乎缺少类型脚本类型。eslint覆盖没有帮助,但是
import '@testing-library/jest-dom/extend-expect'
在乞讨中,测试文件解决了它
我找到了这个答案,也从facebook的官方网站上找到了这个笑话。希望能有所帮助。请确保添加:
import“@测试库/jest-dom/extend-expect”
之后:
从“@testing library/react”导入{render}
上述大多数解决方案似乎都能解决Babel或Eslint问题。如果您对
tslint
和纯Typescript有这样的问题,那么将:@testing library/jest dom
添加到您的类型就足够了
因此,在typescript配置中:
//tsconfig.json
"types": ["node", "jest", "@testing-library/jest-dom"],
还请记住,你应该把这个图书馆包括在笑话里。与其在每个文件中导入,不如在配置文件中导入:
setupFilesAfterEnv: [
"<rootDir>/support/setupTests.js"
],
如果直接使用TypeScript,甚至可以切换到
require()
。最新版本的@testing library/jest dom
(例如5.11.2
)开箱即用,对我来说,问题是由cypress类型与@testing library
使用的@types/chai
冲突引起的:
由于Chai和jQuery是名称空间(globals),不兼容的版本将导致包管理器(warn或npm)嵌套并包含多个定义,并导致冲突
通过在顶级TS配置中不包含cypress
文件夹,而是添加cypress/tsconfig.json
,解决了此问题:
{
"extends": "../tsconfig.json",
"compilerOptions": {
"baseUrl": "../node_modules",
"types": ["cypress"]
},
"include": [
"**/*.ts"
]
}
如果在将
Enzyme
与Jest
集成时出现此错误,请确保使用Jest
断言方法
在Enzyme
文档中,使用了示例chai
断言。相反,我们必须使用jest
断言
例:使用
expect(wrapper.find(Foo)).toHaveLength(3);
而不是
expect(wrapper.find(Foo)).to.have.lengthOf(3);
这些行在SetupTests前面。ts为我修复了它。如果您使用
babel jest
进行翻译,则所选答案通常是正确的
对于那些由于以下错误仍在挣扎的人:
类型“JestMatchers”上不存在属性“toBeInTheDocument”。
- 如果您试图在jest.afterEnv文件中添加
,则会导致import
无法在模块外部使用import语句
无法在模块之外使用import语句
,因为这两个语句的工作方式不同。所以,如果您想纯粹使用ts jest
来解决这个问题(这意味着在jest配置中,您有类似的行):
普通答案中的任何内容都不起作用,然后按照以下步骤操作:
@testing library/jest dom
:tsconfig.json
与上面类似
jest.config.js
config中添加以下内容:jest.config.js
中的根:[“/src”],
路径- 在该路径中创建一个名为
的新文件globals.d.ts
- 确保它与
tsconfig.json中的
regex匹配“included”
- 粘贴到
下一行:globals.d.ts
ts jest
traspiler的postEnv jest设置
运行测试并享受结果
旁注:
- 我的设置包括使用
进行API测试,使用jest
进行E2E的jest
测试,使用supertest
进行react测试的jest,以及使用堆栈中的react testing library
进行浏览器react testing library
测试,现在一切都正常了,所以不要放弃testcafe
- 确保在您的
中涵盖了所有扩展,即jest.config.js
,尤其是当您试图运行moduleFileExtensions:[“ts”、“tsx”、“js”、“jsx”、“json”、“node”]
测试时.tsx
- 如果在此过程中VSCode将停止以红色突出显示toBeInTheDocument(),并且您的测试仍然抛出错误,则您可能错过了
TSConfig中的有效
声明类型
{ "extends": "../tsconfig.json", "compilerOptions": { "baseUrl": "../node_modules", "types": ["cypress"] }, "include": [ "**/*.ts" ] }
expect(wrapper.find(Foo)).toHaveLength(3);
expect(wrapper.find(Foo)).to.have.lengthOf(3);
import '@testing-library/jest-dom/extend-expect'; import '@testing-library/jest-dom';
transform: { "^.+\\.(ts|tsx)$": "ts-jest" },
npm install --save-dev @testing-library/jest-dom
"types": ["node", "jest", "@testing-library/jest-dom"]
... setupFilesAfterEnv: [ "@testing-library/jest-dom/extend-expect" ] ...
import "@testing-library/jest-dom/extend-expect"
"@testing-library/jest-dom": "^5.11.9",
import '@testing-library/jest-dom';