我是为私有方法编写单元测试的新手,我一直在研究如何在 TypeScript 中实现这一点。但是,我找不到适合我的场景的解决方案。
这是我的 TypeScript 代码的简化版本:
export class CallbackManager {
protected queue: Set<() => void>;
constructor() {
this.queue = new Set();
}
}
export class Report extends CallbackManager {
public addToQueue(publishMetric: () => void): void {
this.queue.add(publishMetric);
}
private flushQueue(): void {
if (this.queue.size > 0) {
this.queue.forEach((cb) => {
cb();
});
this.queue.clear();
}
}
public initializeBatching(): void {
addEventListener('visibilitychange', () => {
if (document.visibilityState === 'hidden') {
this.flushQueue();
}
});
}
}
这是我在测试中试图实现的目标:
测试 addToQueue 方法:我想确保调用 addToQueue 会向队列添加一个函数。
describe('addToQueue', () => {
it('should add a function to the queue', () => {
const mockFunction = jest.fn();
const report = new Report();
report.addToQueue(mockFunction);
expect((report as any).queue.size).toBe(1); // Accessing protected property directly for testing
});
});
但是,我遇到了此错误:属性“queue”受保护,只能在类“CallbackManager”及其子类中访问。
测试initializeBatching方法:我想验证在调用initializeBatching时是否添加了visibilitychange事件监听器。 间接测试flushQueue方法:我也想测试visibilitychange事件发生时是否调用flushQueue方法,但是flushQueue是私有方法。 如果您能提供有关如何在 TypeScript 中有效地进行这些测试的任何见解,我将不胜感激。谢谢!
您应该测试您的模拟函数是否被调用。
expect(mockFunction).toHaveBeenCalled();