tldr
-
npm install jest --save-dev(不确定这是否需要——我刚做了)。
- 替换
"scripts": {
...
"test": "react-scripts test",
...
},
与
"scripts": {
...
"test": "jest --watch",
...
},
一切
添加-- --config=jest.config.js 对我来说有点工作:我的测试通过了,但后来我收到以下错误(截断):
Invalid testPattern --config=jest.config.js|--watch|--config|{"roots":["<rootDir>/src"]
...
Running all tests instead.
comment above 中指出了这个问题。
这是怎么回事:
npm test 在 package.json 中查找 scripts.test 中的任何内容并运行它。对于 create-react-app,那是 react-scripts test。这反过来运行
/node_modules/react-scripts/scripts/test.js (source) (您可以轻松打印调试此内容以查看发生了什么)。此脚本会根据您的环境构建一个笑话配置。添加时:
"test": "react-scripts test -- --config=jest.config.js",
到package.json,这取代了react-scripts test 试图创建的开玩笑配置(是的!),但它也消除了"test": "react-scripts test" 生成的参数(嘘!),所以开玩笑认为你正在尝试传入一个测试模式(这显然不是一个有效的测试模式)。
所以,我决定尝试使用 jest CLI 运行我的测试。至少对我来说,它运行良好,并且完成了我所有的测试。它会自动查找jest.config.js,这样就可以了,您可以传入--watch 以获得与react-scripts test 相同的行为。
请记住,react-scripts test 似乎在构建“正确”配置方面遇到了很多麻烦;我绝对没有试图弄清楚所有这些:YMMV。这是它在我的环境中创建的全套选项。例如,对于--config,数组中的下一个元素是配置。
[
'--watch',
'--config',
'{"roots":["<rootDir>/src"],
"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}",
"!src/**/*.d.ts"],
"setupFiles":["<my_root_elided>/node_modules/react-app-polyfill/jsdom.js"],
"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],
"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}",
"<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],
"testEnvironment":"jsdom",
"testRunner":"<my_root_elided>/node_modules/jest-circus/runner.js",
"transform":{
"^.+\\\\.(js|jsx|mjs|cjs|ts|tsx)$":"<my_root_elided>/node_modules/react-scripts/config/jest/babelTransform.js",
"^.+\\\\.css$":"<my_root_elided>/node_modules/react-scripts/config/jest/cssTransform.js",
"^(?!.*\\\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<my_root_elided>/node_modules/react-scripts/config/jest/fileTransform.js"},
"transformIgnorePatterns":["[/\\\\\\\\]node_modules[/\\\\\\\\].+\\\\.(js|jsx|mjs|cjs|ts|tsx)$",
"^.+\\\\.module\\\\.(css|sass|scss)$"],
"modulePaths":[],
"moduleNameMapper":{"^react-native$":"react-native-web",
"^.+\\\\.module\\\\.(css|sass|scss)$":"identity-obj-proxy"},
"moduleFileExtensions":["web.js", "js", "web.ts", "ts", "web.tsx", "tsx", "json", "web.jsx", "jsx", "node"],
"watchPlugins":["jest-watch-typeahead/filename", "jest-watch-typeahead/testname"],
"resetMocks":true,
"rootDir":"<my_root_elided>"}',
'--env',
'<my_root_elided>/node_modules/jest-environment-jsdom/build/index.js'
]