簡體   English   中英

使用Jest從節點模塊導入模擬函數的正確方法

[英]Correct way to import mocked functions from node modules using Jest

我正在學習Jest,看來這應該很簡單,但是我想念樹木的森林不勝枚舉,不勝感激。

我正在使用Jest測試Express路由。 快遞航線在文件/routes/index.js並且它們每一個調用相應的邏輯功能在一個文件中/logic/index.js routeslogic目錄在同一級別上彼此相鄰。

然后,我將__mocks__目錄放在目錄logic並在__mocks__創建一個index.js文件。

//  logic/__mocks__/index.js
import clients from '../../../data/clients'

export const getUserForUserName =  (name) => {
 return Promise.resolve(()=> clients.filter(client => client.name === name) )
}

我在routes內創建一個__tests__目錄,並在其中放置一個index.js文件

// routes/__tests_/index.js
jest.mock("../../logic");
import {getUserForUserName} from "../../logic/__mocks__"


    it("gets correct data for user name", async () => {
  const data = await getUserForUserName("Ines");
  expect(data).toEqual([{"email": "inesblankenship@quotezart.com", "id": "4a0573eb-56d0-45d5-ab36-bebf33c5eb36", "name": "Ines", "role": "admin"}]);
});

這是設置此方法的正確方法嗎?

import {getUserForUserName} from "../../logic/__mocks__"

對我來說似乎是如此“硬連線”,但我想一定是這樣。 任何建議,不勝感激。

您應該完全可以在路徑名中完全不使用__mocks__情況下導入文件。 Jest將處理解析以使用您的模擬而不是實際功能。

例如:

// routes/__tests_/index.js
jest.mock("../../logic");
import {getUserForUserName} from "../../logic"

從本質上講,這與文檔中帶有“ banana”的示例相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM