[英]Can not use resolve.alias for JEST testing
我正在为我的应用程序使用WebPack + React + Jest,我在配置文件中设置了resolve.alias = { app: "/path/to/app" }
。
在React中,我可以使用此路径执行require(“app / component”)并正确获取“/path/to/app/component.js”中的文件。
运行JEST测试时,无法在测试中或在导入的模块中识别此别名。 所有这些在运行应用程序时都有效,但不适用于使用jest-cli的测试。
jest-cli
生活在一个与Webpack分开的世界中,因此无法以这种方式工作。
使用babel-plugin-module-resolver来处理别名。
Jestpack可能有所帮助,因为它允许您在使用Webpack构建测试后运行测试。
我用mocha来测试反应,但我认为它也适用于开玩笑。
你应该使用2个包: mock-require和proxyquire 。
假设你有一个像这样的js文件:
app.js
import action1 from 'actions/youractions';
export function foo() { console.log(action1()) };
你的测试代码应该像这样写:
app.test.js
import proxyquire from 'proxyquire';
import mockrequire from 'mock-require';
before(() => {
// mock the alias path, point to the actual path
mockrequire('actions/youractions', 'your/actual/action/path/from/your/test/file');
// or mock with a function
mockrequire('actions/youractions', {actionMethod: () => {...}));
let app;
beforeEach(() => {
app = proxyquire('./app', {});
});
//test code
describe('xxx', () => {
it('xxxx', () => {
...
});
});
文件树
app.js
|- test
|- app.test.js
首先通过mock-require in函数模拟别名路径,然后在beforeEach函数中通过proxyquire模拟测试对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.