我正在开发一个Rails应用程序,我已经通过Webpacker gem设置了React-rails和Jest。我对这个堆栈的大部分都是新手,所以请耐心等待。当我在像这样的组件中导入一些CSS时,我的问题出现在Jest中
//some_component.jsx
import('react-datetime/css/react-datetime.css')
//or even any local CSS
import('./any_local_css.css')
yarn test
import('react-datetime/css/react-datetime.css');
^^^^^^
SyntaxError: Unexpected token import
我为the Jest docs for working with webpack所列出的技术经历了this one和几个 Github问题,建议在webpack 2 portion of the Jest docs的Jest配置中使用moduleNameMapper
选项与Jest docs一样,package.json
选项。
我遇到的主要问题是唯一可行的模块映射是这样的:
transform
因为它是"moduleNameMapper": { ".*": "<rootDir>/path/to/mock.js" }
,我认为它正在进行并转换所有我的模块,包括带有测试本身的模块。所以当我用.*
运行测试时,我开始得到关于酶适配器的构造函数的错误:
yarn test
。这不是我删除映射和css导入时出现的错误。
Jest文档中的示例要求我使用TypeError: _enzymeAdapterReact2.default is not a constructor
而不是\\.(css)$
,但这与任何内容都不匹配,我回来时遇到第一个错误。
关于这个的一些问题:
.*
和moduleNameMapper
的正则表达式语法如此不同?那些CSS文件的匹配器看起来几乎相同transform
目录中找到CSS文件吗?以下是我如何按照Webpacker / React-rails的建议保存我的JS文件:
node_modules
app
├── javascript
| ├── components
| | └── my_component.jsx
| └── src
| └── my_css.css
├── test
| └── suites
| └── javascript
| ├── src
| | └── testSetup.jsx
| └── my_test.jsx
├── node_modules
└── package.json
"jest": {
"moduleNameMapper": {
"\\.(css)$": ""
},
"setupTestFrameworkScriptFile": "<rootDir>/test/suites/javascript/src/testSetup.jsx",
"moduleDirectories": [
"node_modules",
"app/javascript/components",
"app/javascript/src"
],
"roots": [
"test/suites/javascript"
]
}
import ReactDOM from 'react-dom';
import { mount, shallow, configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
configure({ adapter: new Adapter() });
import MyComponent from 'MyComponent'
describe('<MyComponent> />', () => {
it('renders', () => {
const wrapper == shallow((<MyComponent/>));
expect(wrapper.find('#some_id').toHaveLength(1);
}
}
语法,但是CSS实际上并没有显示在页面上,它被称为import css from 'react-datetime/css/react-datetime.css'
的东西所固定,但似乎没有把它放在任何地方得到解释。extract-text-plugin
文件中执行,而不是package.json
,因为我不相信我有一个.babelrc
选项与transform
一起使用(尝试使用模拟文件的内容包含其在jest docs上的内容,以及identity-obj-proxy github readme`上的内容/ LI>
identity-obj-proxy
bundle exec rake webpacker:install
bundle exec rake webpacker:install:react
bundle exec rails g react:component HelloWorld
或在yarn add react-datetime
解决方法非常简单 - 您可以在app/javascript/src/css.css
中导入CSS,而Jest不需要了解它。当你最终在app/javascript/packs/application.js
文件中输入几个CSS时,它可能会很尴尬。
答案 0 :(得分:0)
这个jest配置对我有用:
{
"jest": {
"moduleNameMapper": {
".*css$": "<rootDir>/src/stub.css",
}
}
(请记住创建stub.css
)
答案 1 :(得分:0)
在我的package.json中,我这样做:
"jest": {
"verbose": true,
"testURL": "https://test.domain.com",
"testPathIgnorePatterns": ["config/*"],
"moduleNameMapper": {
"\\.(css|scss)$": "<rootDir>/app/javascript/lib/CSSStub.js"
}
},
app / javascript / lib / CSSStub.js只是
module.exports = {};