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