gpt4 book ai didi

javascript - Jest 不转换 CSS 文件导入语句

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:39:32 27 4
gpt4 key购买 nike

一些上下文:

我正在开发一个 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以及关于所列技术的几个 Github 问题,例如 this one这建议使用 moduleNameMapper我的 Jest 配置中的选项 package.json就像 Jest 文档所做的那样,transform选项。

我遇到的主要问题是唯一可以工作的模块映射是这样的:

"moduleNameMapper": { ".*": "<rootDir>/path/to/mock.js" }

问题:

因为它是 .* ,我认为它会继续并转换我的所有模块,包括带有测试本身的模块。所以当我用 yarn test 运行测试时,我开始收到有关 enzyme 适配器构造函数的错误: TypeError: _enzymeAdapterReact2.default is not a constructor .这不是我在删除映射和 css 导入时遇到的错误。

Jest 文档中的示例要我使用 \\.(css)$而不是 .*但这不会匹配任何东西,我又遇到了第一个错误。

关于这个的几个问题:

  • 为什么 moduleNameMapper 的正则表达式语法如此不同?和 transform ? CSS 文件的那些匹配器看起来几乎相同
  • 这些匹配器中的任何一个都在你的 node_modules 中找到 CSS 文件吗?目录?

我的设置

以下是我如何按照 Webpacker/React-rails 的建议保存我的 JS 文件:

app
├── javascript
| ├── components
| | └── my_component.jsx
| └── src
| └── my_css.css
├── test
| └── suites
| └── javascript
| ├── src
| | └── testSetup.jsx
| └── my_test.jsx
├── node_modules
└── package.json

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"
]
}

testSetup.js

import ReactDOM from 'react-dom';
import { mount, shallow, configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
configure({ adapter: new Adapter() });

我的测试.jsx

import MyComponent from 'MyComponent'

describe('<MyComponent> />', () => {
it('renders', () => {
const wrapper == shallow((<MyComponent/>));
expect(wrapper.find('#some_id').toHaveLength(1);
}
}

我尝试过的更多内容

  • 使用import css from 'react-datetime/css/react-datetime.css'我的组件中的语法,但是 CSS 实际上并没有显示在页面上,它被一个叫做 extract-text-plugin 的东西所破坏。 ,但似乎没有将它放在任何可以解释的地方。
  • 使用 jest-css-modules,但是 Github 页面上提到我“可能”不需要它,特别是因为 Jest 现在正在做模块映射/转换
  • 关注 webpack 2 portion of the Jest docs并添加 babel(我直接在我的 package.json 文件而不是我的 .babelrc 中这样做,因为我不相信我有一个
  • 使用transform带有 identity-obj-proxy 的选项(尝试了一次模拟文件的内容,其中包含它在开 Jest 文档中所说的内容,以及一个在 identity-obj-proxy github readme 上的内容`

重现步骤

  1. 创建 Rails 4.2 应用
  2. 安装 Webpacker gem 和 bundle exec rake webpacker:install
  3. 安装 ReactRails bundle exec rake webpacker:install:react
  4. 制作一个组件bundle exec rails g react:component HelloWorld
  5. 安装 React-datetime yarn add react-datetime或者在 app/javascript/src/css.css 中创建一些 css
  6. 导入css

当前的解决方法

解决方法非常简单 - 在 app/javascript/packs/application.js 中导入您想要的 CSS而 Jest 不必知道任何有关它的信息。当您最终在 application.js 中导入多个 CSS 时,这可能会很尴尬。文件。

最佳答案

这个 Jest 配置对我有用:

{
"jest": {
"moduleNameMapper": {
".*css$": "<rootDir>/src/stub.css",
}
}

(记得创建stub.css)

关于javascript - Jest 不转换 CSS 文件导入语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50394420/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com