evi*_*ing 5 typescript reactjs jestjs
这是我的目录的orders外观。我想测试一个使用orders/helpers手动 Jest 模拟的函数。
orders
__mocks__
helpers.ts
__tests__
orders.ts
helpers.ts
orders.ts
Run Code Online (Sandbox Code Playgroud)
我正在orders/helpers.ts导出一个简单的函数:
export const addIdToOrder = (order: Omit<NewOrderState, 'id'>): Order =>
({
...order,
id: v4(),
} as Order);
Run Code Online (Sandbox Code Playgroud)
我可以如下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),
}));
Run Code Online (Sandbox Code Playgroud)
但是,现在我需要添加另一个测试文件,它还需要从 模拟这个函数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);
Run Code Online (Sandbox Code Playgroud)
那里有一个错误helpers.addToOrder:
错误:(8, 1) TS2571:对象的类型为“未知”。
我该如何打字helpers?我可以做类似的事情import * as helpers from '../helpers',然后以某种方式从该模块获取导出对象的类型吗?我怎么做?
现在我正在输入 helpers as any,这会删除所有 TS 错误,但我不想这样做。
小智 4
您可以使用关键字捕获类型typeof。
import * as helpers from '../helpers'
type HelpersType = typeof helpers;
const helpers = jest.genMockFromModule<HelpersType>('../helpers');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
925 次 |
| 最近记录: |