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

时间:2019-09-18 17:18:01

标签: javascript node.js jestjs

我正在学习Jest,看来这应该很简单,但我想念树木的森林不见了,不胜感激。

我正在使用Jest测试Express路线。快速路由位于文件/routes/index.js中,它们各自调用文件/logic/index.js中的相应逻辑功能。 routeslogic目录在同一级别上彼此相邻。

然后我在目录__mocks__内放置一个logic目录,并在index.js内创建一个__mocks__文件

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

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

我在__tests__内创建一个routes目录,并在其中放置一个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__"

对我来说似乎“硬连线”,但我想必须是这种方式。任何建议,不胜感激。

1 个答案:

答案 0 :(得分:1)

您应该完全可以在路径名中完全不使用&(?=[^<>]*</) 的情况下导入文件。 Jest将处理解析以使用您的模拟而不是实际功能。

例如:

__mocks__

从本质上讲,这与文档中带有“香蕉”的示例相同。