我正在为我的应用程序使用WebPack + React + Jest,并在配置文件中设置了resolve.alias = { app: "/path/to/app" }
。
在React中,我可以使用此路径执行require(“app / component”)并正确获取“/path/to/app/component.js”中的文件。
运行JEST测试时,无法在测试中或导入的模块中识别此别名。所有这些在运行应用程序时都有效,但不适用于使用jest-cli的测试。
答案 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>