【发布时间】:2021-12-11 16:18:29
【问题描述】:
我需要测试一个函数,我从一个名为“heartbeats”的 NPM 包中调用另一个函数:
index.ts
export async function checkUp(app: App, heart, beats: number, iterations: number): Promise<void> {
// const heart = heartbeats.createHeart(1000, 'checkUp');
heart.createEvent(beats, { countTo: iterations }, async (count, last) => {
const secondCheck = await secondCheckStatus();
if (!secondCheck) {
app.quit();
}
});
}
index.test.ts
import * as Heartbeats from 'heartbeats';
import { secondCheckStatus } from './utils';
...
jest.mock('./utils', () => ({
...jest.requireActual('./utils'),
secondCheckStatus: jest.fn(),
}));
const mockSecondCheckStatus = secondCheckStatus as jest.MockedFunction< typeof secondCheckStatus >;
...
beforeEach(() => {
jest.clearAllMocks();
});
...
it('should auto kill app after checks', async () => {
const mockApp = new MockApp() as unknown as jest.Mocked<App>;
const mockHeart = Heartbeats.heart as unknown as jest.Mock;
const mockCreateEvent = Heartbeats.heart.createEvent as unknown as jest.MockedFunction<
typeof Heartbeats.heart.createEvent
>;
mockCreateEvent.mockImplementation((beats, iter, cb) => {
cb(null, null);
});
mockSecondCheckStatus.mockResolvedValueOnce(false);
mockApp.requestSingleInstanceLock.mockReturnValue(true);
const isRunning = await checkUp(mockApp, mockHeart, 1, 1);
await main(mockApp);
expect(mockApp.quit).toHaveBeenCalledTimes(1);
expect(isRunning).toBe(false);
});
但我总是得到:
TypeError: 无法读取未定义的属性 'mockImplementation'
83 | typeof Heartbeats.heart.createEvent
84 | >;
> 85 | mockCreateEvent.mockImplementation((beats, iter, cb) => {
知道我做错了什么吗?
非常感谢(我与 Jest 顺利合作还有很长的路要走)
【问题讨论】:
-
secondCheckStatus来自哪里? -
我已经使用
secondCheckStatus参考编辑了测试文件 -
我在测试文件中添加了
const mockSecondCheckStatus = secondCheckStatus as jest.MockedFunction< typeof secondCheckStatus >;,我忘记了。
标签: typescript unit-testing jestjs mocking