Javascript 使用sinon存根的存根类和方法

Javascript 使用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

我需要有关使用sinon msk客户端函数connect()和send()或sendmessage()进行存根的帮助。尝试了多种方法,但仍然调用实际函数。请帮忙

这里是文件中的代码片段

index.js

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(),
})));