node.js - 使用 Sinon NodeJs 编写测试用例
问题描述
我在使用第三方库(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
但它每次都失败了。
解决方案
@Techno Crazzyyyy 你可以在这里做的是
spyOn(KafkaWrapper.prototype, "kafkaInstance").and.returnValue({
consumer: function () {
return {
connect: function () {
return Promise.resolve({})
}
}
}
});
虽然我在这里使用 jasmine,但这应该可以帮助您在这里窥探您的依赖关系。
推荐阅读
- ios - 使单元格视图不可用颜色
- node.js - 如何通过代码在 DialogFlow Fulfillment 中创建意图?
- javascript - 如何使用 JavaScript(外部域)解析 RSS 提要?
- android - 如何在 Fragment Android Recyclerview Volley 中显示 JSON 数据?
- python - 从python中的.dict文件中提取key-multipul值
- wordpress - 在 wordpress 上设置 git:git add 问题
- javascript - @click 组件动态列表上的事件
- php - 向 Laravel 索取证书
- python - 使用 matplotlib 获取叠加直方图
- laravel - Laravel Socket.IO vuejs