簡體   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