我正在尝试更改获取 subscribe
回调的第三方 processEvents
函数的模拟实现。 subscribe
函数的实现在不同的测试中发生变化,因为 processEvents
接收一个参数(事件列表),该参数根据测试场景而变化,因此也会导致不同的 Jest 期望。
模块:setup.ts
(此模块设置挂钩等)
// This is a mock setup factory function
export const EventHubConsumerFactory = (subscribeFn: (...args: any) => any) => {
const mockedModule = {
...jest.requireActual("@azure/event-hubs"),
EventHubConsumerClient: jest.fn().mockImplementation(() => ({
close: jest.fn(),
subscribe: jest.fn().mockImplementation(subscribeFn),
})),
};
jest.doMock("@azure/event-hubs", () => mockedModule);
};
模块:event-hub-consumer.ts
(这个类有一个调用doSubscribe
函数并传递subscribe
回调的processEvents
函数)
doSubscribe() {
this.subscription = this.consumerClient.subscribe(
{
processEvents: async (events) => { // do something such as write to db }
}
)};
}
模块:test.ts
(这里是一个示例测试。这个模块也有一堆导入)
it("runs some test....", (done) => {
// write some test case setup code
const subscribeFn = ({ processEvents }: any) => {
processEvents(eventHubEvents)
.then(async () => {
// evaluate expectations with data saved to db
done();
})
.catch((err: Error) => done(err));
};
jest.isolateModules(() => {
EventHubConsumerFactory(subscribeFn);
const { EventHubConsumer } = require("../event-hub-consumer");
new EventHubConsumer(eventHubConsumerParams).subscribe();
});
});
我读到 isolateModules
本地化模块注册表缓存。但是,这似乎不起作用。我的理解是测试在回调 processEvents
完成执行之前退出。