Javascript 使用sinon存根的存根类和方法
我需要有关使用sinon msk客户端函数connect()和send()或sendmessage()进行存根的帮助。尝试了多种方法,但仍然调用实际函数。请帮忙 这里是文件中的代码片段 index.jsJavascript 使用sinon存根的存根类和方法,javascript,node.js,sinon,sinon-chai,Javascript,Node.js,Sinon,Sinon Chai,我需要有关使用sinon msk客户端函数connect()和send()或sendmessage()进行存根的帮助。尝试了多种方法,但仍然调用实际函数。请帮忙 这里是文件中的代码片段 index.js var KafkaConnection = require('./mskclient'); var kafkaObj = new KafkaConnection(key.User, key.Secret); var res = await
var KafkaConnection = require('./mskclient');
var kafkaObj = new KafkaConnection(key.User, key.Secret);
var res = await kafkaObj.connectProducer(event.body);
mskclient.js
类卡夫卡连接{
构造函数(用户,机密){
this.connection=新卡夫卡({
身份验证超时:5000,
clientId:客户端id,
brokerlist.split(“,”),
是的,
sasl:{
机构:“紧急停堆-sha-512”,
用户名:user,
密码:secret,
},
});
this.producer=null;
}
异步发送消息(msgObj){
console.log('sendMessage');
this.producer=this.producer | this.connection.producer();
等待此消息。producer.connect();
等待这个.producer.send(msgObj);
}
异步断开连接(){
this.producer&(等待this.producer.disconnect());
}
异步connectProducer(事件){
试一试{
log.info(“发送消息”);
console.log('connectProducer');
等待此消息。发送消息({
主题:process.env.topic_NAME,
阿克斯:1,
信息:[
{
键:“测试键”,
值:JSON.stringify(事件),
},
],
});
等待此消息。断开连接();
log.info('已成功发送消息');
返回0;
}捕获(e){
log.info('消息未发送给卡夫卡..');
日志错误(e);
等待此消息。断开连接();
返回1;
}
}
}
module.exports=卡夫卡连接;
到目前为止,我尝试了以下方法,但它们都被称为kafka actuall函数,而不是存根
方法#1
进近#2
您好根据我对您的问题的理解,我认为这就是您想要的:
sinon.stub(kafkanconnection.prototype,'connectProducer').callsFake(()=>{
返回1;
})
sinon.stub(KafkaConnection.prototype,'sendMessage').callsFake(()=>{})
sinon.stub的第二个参数应该是您想要模拟的函数的名称。您好根据我对您问题的理解,我想这就是您想要的:
sinon.stub(kafkanconnection.prototype,'connectProducer').callsFake(()=>{
返回1;
})
sinon.stub(KafkaConnection.prototype,'sendMessage').callsFake(()=>{})
sinon.stub的第二个参数应该是要模拟的函数的名称。首先,独立地在其自己的导入连接类上提供服务
const service = require('../index'); // <-- import '../mskclient' and create obj
const KafkaConnection = require('../mskclient');
但是如果您使用jest
,您可以
jest.mock('../mskclient');
// or
jest.mock('../mskclient', () => jest.fn(() => ({
connectProducer: jest.fn(),
})));
const service = require('../index'); // <-- import '../mskclient' and create obj
const KafkaConnection = require('../mskclient');
// es6
import service from '../';
import KafkaConnection from '../mskclient';
jest.mock('../mskclient', () => jest.fn(() => ({
connectProducer: jest.fn(),
})));
jest.mock('../mskclient');
//或
jest.mock('../mskclient',()=>jest.fn(()=>({
connectProducer:jest.fn(),
})));
const service=require(“../index”);//笑话fn(()=>({
connectProducer:jest.fn(),
})));
请参阅:首先,独立导入自己的连接类上的服务
const service = require('../index'); // <-- import '../mskclient' and create obj
const KafkaConnection = require('../mskclient');
但是如果您使用jest
,您可以
jest.mock('../mskclient');
// or
jest.mock('../mskclient', () => jest.fn(() => ({
connectProducer: jest.fn(),
})));
const service = require('../index'); // <-- import '../mskclient' and create obj
const KafkaConnection = require('../mskclient');
// es6
import service from '../';
import KafkaConnection from '../mskclient';
jest.mock('../mskclient', () => jest.fn(() => ({
connectProducer: jest.fn(),
})));
jest.mock('../mskclient');
//或
jest.mock('../mskclient',()=>jest.fn(()=>({
connectProducer:jest.fn(),
})));
const service=require(“../index”);//笑话fn(()=>({
connectProducer:jest.fn(),
})));
请参阅:“尝试了多种方法”请分享主要问题中已经测试过的内容。请检查以了解为什么这不起作用,我想你可能会从我的旧答案中得到一些东西:。它基本上与运行时绑定有关。而且,createStubInstance并没有做您认为应该做的事情。它没有“包装”构造函数,它只是一个帮助对象创建者方法。“尝试了多种方法”请分享在主要问题中已经测试过的内容。请检查了解为什么这不起作用,我想你可能会从我的旧答案中得到一些东西:。它基本上与运行时绑定有关。而且,createStubInstance并没有做您认为应该做的事情。它不“包装”构造函数,它只是一个辅助对象创建者方法。
// mskclient.js
module.exports = {
KafkaConnection: class KafkaConnection {},
};
// service.js
const mod = require('./mskclient');
module.exports = function run() {
const conn = new mod.KafkaConnection();
conn.doSomething();
}
jest.mock('../mskclient');
// or
jest.mock('../mskclient', () => jest.fn(() => ({
connectProducer: jest.fn(),
})));
const service = require('../index'); // <-- import '../mskclient' and create obj
const KafkaConnection = require('../mskclient');
// es6
import service from '../';
import KafkaConnection from '../mskclient';
jest.mock('../mskclient', () => jest.fn(() => ({
connectProducer: jest.fn(),
})));