繁体   English   中英

无法使用resolve.alias进行JEST测试

[英]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-requireproxyquire

假设你有一个像这样的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM