reactjs - 在 Jest 中编写手动模拟时,如何键入调用 genMockFromModule 的结果?

标签 reactjs typescript jestjs

这是我的目录 orders 的样子。我想使用手动 Jest 模拟测试 orders/helpers 中的函数。

orders
  __mocks__
    helpers.ts
  __tests__
    orders.ts
  helpers.ts
  orders.ts

orders/helpers.ts 中,我正在导出一个简单的函数:

export const addIdToOrder = (order: Omit<NewOrderState, 'id'>): Order =>
  ({
    ...order,
    id: v4(),
  } as Order);

orders/__tests__/orders.ts 中,我可以模拟模块 orders/helpers 如下:

const MOCK_ID = 'test-id-1234';
// mock addIdToOrder so we can have a deterministic id in tests
jest.mock('../helpers', () => ({
  __esModule: true,
  addIdToOrder: (order: Omit<NewOrderState, 'id'>): Order =>
    ({
      ...order,
      id: MOCK_ID,
    } as Order),
}));

但是,现在我需要添加另一个测试文件,它还需要从 orders/helper 模拟这个函数,所以我添加了 orders/__mocks__/helpers 并尝试在那里定义模拟。 这是我目前所拥有的:

const helpers = jest.genMockFromModule('../helpers');

export const MOCK_ID = 'test-id-09e26f6a-48cc-4754-bb54-22043adbe2ea';

helpers.addIdToOrder = (order: Omit<NewOrderState, 'id'>): Order =>
  ({
    ...order,
    id: MOCK_ID,
  } as Order);

helpers.addToOrder 有错误:

Error:(8, 1) TS2571: Object is of type 'unknown'.

如何输入helpers?我可以做一些像 import * as helpers from '../helpers' 这样的事情,然后以某种方式从该模块中获取导出对象的类型吗?我该怎么做?

现在我将 helpers 键入 any,这会消除所有 TS 错误,但我不想这样做。

最佳答案

您可以使用 typeof 关键字捕获类型。

import * as helpers from '../helpers'

type HelpersType = typeof helpers;
const helpers = jest.genMockFromModule<HelpersType>('../helpers');

关于reactjs - 在 Jest 中编写手动模拟时,如何键入调用 genMockFromModule 的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57154774/

相关文章:

javascript - 如何在 React Native 中使用 Jest 测试 lodash 的去抖功能?

javascript - ValidateUsername 是只读的 | TS 与 Jest/Enzyme

node.js - Jest 无法处理sequelize.sync() promise

javascript - react native : How to set background color for the whole app and individual scene in react-native-router-flux?

javascript - 组件不在 native react 中呈现

javascript - getByTestID 不适用于自定义组件

javascript - Jest 显示访问 PropTypes 和 createClass 的 console.warn

javascript - 意外的 token = 导入/未命名为默认 eslint 错误

javascript - 将 Hooks 与 Redux 一起使用——不好的做法?

TypeScript 编译中缺少 Angular- 模块。请通过 'files' 或 'include' 属性确保它在您的 tsconfig 中