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

时间:2014-12-22 12:39:16

标签: javascript unit-testing reactjs webpack jestjs

我正在为我的应用程序使用WebPack + React + Jest,并在配置文件中设置了resolve.alias = { app: "/path/to/app" }

在React中,我可以使用此路径执行require(“app / component”)并正确获取“/path/to/app/component.js”中的文件。

运行JEST测试时,无法在测试中或导入的模块中识别此别名。所有这些在运行应用程序时都有效,但不适用于使用jest-cli的测试。

3 个答案:

答案 0 :(得分:3)

jest-cli生活在与Webpack分开的世界中,因此无法以这种方式运作。

使用babel-plugin-module-resolver处理别名。

答案 1 :(得分:0)

Jestpack可能有所帮助,因为它可以让您在使用Webpack构建测试后运行测试。

答案 2 :(得分:0)

我使用mocha来测试反应,但我认为它也适用于开玩笑。

您应该使用2个包: mock-require proxyquire

假设你有一个像这样的js文件:

<强> app.js

5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa

你的测试代码应该这样写:

<强> app.test.js

import action1 from 'actions/youractions';   

export function foo() { console.log(action1()) }; 

文件树

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', () => {
    ...
  });
});

首先在函数之前通过mock-require模拟别名路径,然后在beforeEach函数中通过proxyquire模拟测试对象。<​​/ p>

相关问题