使用 Jest 从节点模块导入模拟函数的正确方法



我正在学习 Jest,看起来这应该很简单,但我错过了树木的森林,并希望得到一些指导。

我正在使用Jest来测试快速路线。 快速路由位于文件/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"

这本质上与文档中带有"香蕉"的示例相同。

最新更新