【发布时间】:2021-11-28 23:36:05
【问题描述】:
在使用第三方库 (Kafkajs) 时,我正在为一些嵌套函数编写单元测试用例。测试用例首先创建一个对象,然后在其中调用一个类对象,然后从该类调用一个函数。此完整代码在第三方 SDK 中。
下面的代码是这样的
KafkaWrapper.ts
export class KafkaWrapper {
kafkaInstance: any;
constructor() {
this.kafkaInstance = new Kafka({
clientId: Config.serviceSettings.serviceTag,
brokers: [Config.kafkaBrokers!],
logLevel: logLevel.ERROR,
logCreator: CustomLogCreator,
});
}
}
然后我有另一个 kafka-consumer.ts 文件,它在上面的类中使用,例如
const kafkaEvent = new KafkaWrapper();
const consumer = kafkaEvent.kafkaInstance.consumer({ groupId: Config.cdnPurgeConsumerGroup });
export default class CDNPurgeJobConsumer {
public static async brokerConnection(): Promise<void> {
console.log('Broker connection');
await consumer.connect();
}
}
我写到现在的测试用例是
it('create fake connection with kafka broker', async function () {
const stub = sandbox.stub(Kafka, 'consumer').returns({
connect: sinon.fake()
});
await CDNPurgeJobConsumer.brokerConnection();
expect(stub.calledOnce).to.equal(true);
stub.restore();
});
我也试图伪造 KafkaWrapper 函数,但它也没有为我工作。
这里我想模拟连接函数,因为Kafka 类来自第三方库。
第三方库名称为kafkajs,版本为1.15.0。
我曾尝试在 Kafka 上存根和天空,但每次都失败。
【问题讨论】:
-
你能分享一下你现在能写什么单元测试吗?虽然失败了?
-
用我写的测试用例更新了帖子描述。
标签: node.js unit-testing sinon