Var*_*kul 9 reactjs jestjs create-react-app
我试图为我现有的项目创建测试文件
https://github.com/facebookincubator/create-react-app
但是我跑的时候遇到了这个错误 npm test a
FAIL src/__tests__/movie_single/MovieSingle-test.js
? Test suite failed to run
matchMedia not present, legacy browsers require a polyfill
at Object.MediaQueryDispatch (node_modules/enquire.js/dist/enquire.js:226:19)
at node_modules/enquire.js/dist/enquire.js:291:9
at Object.<anonymous>.i (node_modules/enquire.js/dist/enquire.js:11:20)
at Object.<anonymous> (node_modules/enquire.js/dist/enquire.js:21:2)
at Object.<anonymous> (node_modules/react-responsive-mixin/index.js:2:28)
at Object.<anonymous> (node_modules/react-slick/lib/slider.js:19:29)
at Object.<anonymous> (node_modules/react-slick/lib/index.js:3:18)
at Object.<anonymous> (src/components/movie_single/MovieDetailsBox.js:4:45)
at Object.<anonymous> (src/components/movie_single/MovieSingle.js:3:50)
at Object.<anonymous> (src/__tests__/movie_single/MovieSingle-test.js:3:46)
at process._tickCallback (internal/process/next_tick.js:103:7)
Test Suites: 1 failed, 1 total
Tests: 0 total
Snapshots: 0 total
Time: 2.642s
Ran all test suites matching "a".
Run Code Online (Sandbox Code Playgroud)
所以这是我的 package.json
{
"name": "xxx",
"version": "0.1.0",
"private": true,
"devDependencies": {
"autoprefixer-stylus": "0.10.0",
"concurrently": "3.0.0",
"react-scripts": "0.6.1",
"stylus": "0.54.5"
},
"scripts": {
"start": "react-scripts start",
"watch": "concurrently --names 'webpack, stylus' --prefix name 'npm run start' 'npm run styles:watch'",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject",
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的 MovieSingle-test.js
import React from 'react';
import ReactDOM from 'react-dom';
import MoviesSingle from '../../components/movie_single/MovieSingle';
it('renders without crashing', () => {
const div = document.createElement('div');
ReactDOM.render(<MoviesSingle />, div);
});
Run Code Online (Sandbox Code Playgroud)
那么我该如何解决这个问题并至少让常见的反应组件测试通过?
谢谢!
小智 9
添加src/setupTests.js到项目中(将在运行测试之前执行):
/**
* fix: `matchMedia` not present, legacy browsers require a polyfill
*/
global.matchMedia = global.matchMedia || function() {
return {
matches : false,
addListener : function() {},
removeListener: function() {}
}
}
Run Code Online (Sandbox Code Playgroud)
我刚刚碰到它,这是帮助我的原因:
test-setup.js从这里获取并将其放在src目录中
window.matchMedia = window.matchMedia || function() {
return {
matches : false,
addListener : function() {},
removeListener: function() {}
};
};
Run Code Online (Sandbox Code Playgroud)
将以下内容添加到 package.json
"jest": {
"setupFiles": ["<rootDir>\\src\\test-setup.js", "<rootDir>\\config\\polyfills.js"]
},
Run Code Online (Sandbox Code Playgroud)
看看是否有帮助.
小智 5
添加这段代码:
window.matchMedia =
window.matchMedia ||
function() {
return {
matches: false,
addListener: function() {},
removeListener: function() {}
};
};
Run Code Online (Sandbox Code Playgroud)
在 jest.setup.js 或 setupTests.js 中(您可以从 jest.config.js 检查名称,例如 setupFiles: ["./jest.setup.js"] )
| 归档时间: |
|
| 查看次数: |
3067 次 |
| 最近记录: |