spo*_*bob 7 reactjs webpack jestjs enzyme
这是我的测试文件
// /imports/components/main.test.js
import React from 'react'
import { shallow, mount } from 'enzyme'
import Main from './main'
import TextInput from "/imports/ui/textInput"
...
Run Code Online (Sandbox Code Playgroud)
而 main.js 有
// /imports/components/main.js
import { action1 } from "/imports/actions/myAction"
Run Code Online (Sandbox Code Playgroud)
但是当我运行测试时它会抛出一个错误,说
Cannot find module '/imports/actions/myAction' from 'main.js'
如果我评论import './main'
,导入 TextInput 也会发生同样的事情。我在 node_modules 中导入模块没有问题。
如何告诉 Jest 或 webpack 使用项目目录(即import Foo from /imports/...
)中的绝对路径导入组件?
nis*_*ora 17
解决相对路径导入问题的更好方法是创建与jsconfig.json
文件相邻的package.json
文件。
{
"compilerOptions": {
"baseUrl": "src"
}
}
Run Code Online (Sandbox Code Playgroud)
然后import { action1 } from "actions/myAction";
会工作
如果您使用 Create React App,您可以在项目根目录的a jsconfig.json
(需要在新的 JavaScript 模板中tsconfig.json
创建)或(已在 TypeScript 模板中创建)中设置绝对导入路径,以服务于您的使用。
例子:
{
"compilerOptions": {
"baseUrl": "src"
},
"include": ["src"]
}
Run Code Online (Sandbox Code Playgroud)
官方文档:https : //create-react-app.dev/docs/importing-a-component/#absolute-imports
另一种解决方案是.env
在项目的根目录中创建一个文件。
在其中,您将添加 NODE_PATH=src/
就这样
保存文件并在终端中重新启动开发环境。
之后,您将检查您的项目并相应地更新一些导入语句。
小智 3
我的文件结构遵循与您完全相同的模式。为了教 Jest 使用以 a 开头的导入/
,我使用babel-plugin-module-resolver及其方便的root
选项。我.babelrc
的 Jest 看起来像这样:
{
"presets": ["es2015", "meteor"],
"plugins": [
"transform-class-properties",
"transform-react-constant-elements",
"transform-react-inline-elements",
"transform-react-remove-prop-types",
["module-resolver", {
"root": ["../"],
"alias": {
"react-router-dom": "react-router-dom/umd/react-router-dom.min.js",
"redux": "redux/dist/redux.min.js",
"react-redux": "react-redux/dist/react-redux.min.js"
}
}]
]
}
Run Code Online (Sandbox Code Playgroud)
由于我使用的是自定义其根导入的 Meteor,因此我将 Jest 的使用和配置隐藏到.jest
存储库根目录的一个目录中,这样我就可以拥有特定的目录,.babelrc
而不会冒与 Meteor 的目录发生冲突的风险。
归档时间: |
|
查看次数: |
26098 次 |
最近记录: |