我使用
webpack开发一个React组件。这里是一个简单的版本:
'use strict'; require('./MyComponent.less'); var React = require('react'); var MyComponent = React.createClass({ render() { return ( <div className="my-component"> Hello World </div> ); } }); module.exports = MyComponent;
现在,我想使用jest测试这个组件。这里是我的package.json的相关位:
"scripts": { "test": "jest" },"jest": { "rootDir": ".","testDirectoryName": "tests","scriptPreprocessor": "<rootDir>/node_modules/babel-jest","unmockedModulePathPatterns": [ "react" ] }
当运行npm测试时,我得到以下错误:
SyntaxError: /Users/mishamoroshko/react-component/src/tests/MyComponent.js: /Users/mishamoroshko/react-component/src/MyComponent.js: /Users/mishamoroshko/react-component/src/MyComponent.less: Unexpected token ILLEGAL
看起来像webpack需要处理require(‘./ MyComponent.less’)before jest可以运行测试。
我不知道我是否需要使用像jest-webpack.如果是,有没有办法指定多个scriptPreprocessors? (注意,我已经使用babel-jest)
解决方法
我结束了以下黑客:
// package.json "jest": { "scriptPreprocessor": "<rootDir>/jest-script-preprocessor",... } // jest-script-preprocessor.js var babelJest = require("babel-jest"); module.exports = { process: function(src,filename) { return babelJest.process(src,filename) .replace(/^require.*\.less.*;$/gm,''); } };
但是,我仍然想知道什么是这个问题的正确解决方案。