使用 Sinon NodeJs 编写测试用例

     2023-02-21     199

关键词:

【中文标题】使用 Sinon NodeJs 编写测试用例【英文标题】:Writing test case using Sinon NodeJs 【发布时间】: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 上存根和天空,但每次都失败。

【问题讨论】:

你能分享一下你现在能写什么单元测试吗?虽然失败了? 用我写的测试用例更新了帖子描述。 【参考方案1】:

@Techno Crazzyyyy 你可以在这里做的是

spyOn(KafkaWrapper.prototype, "kafkaInstance").and.returnValue(
                consumer: function () 
                    return 
                        connect: function () 
                            return Promise.resolve()
                        
                    
                
            );

虽然我在这里使用 jasmine,但这应该可以帮助您在这里窥探您的依赖关系。

【讨论】:

@techno-crazzyyyy 如果您遇到任何问题,或者您希望有任何改进,请告诉我。 感谢您查看此内容。实施此操作后,我收到此错误Attempted to wrap undefined property kafkaInstance as function kafkaInstance 是 KafkaWrapper 类中的一个变量。 我也试过 const stub = sandbox.stub(KafkaWrapper.prototype, 'kafkaInstance').get(() => return consumer: function () return connect: async function () Promise.resolve(); , ; , ; );但它也给了我Cannot stub non-existent property kafkaInstance 好的,让我检查一次.. 这个解决方案可以正常工作,我在 brokerConnection 函数中声明了 kafkaEventconsumer,但我需要按照描述的方式模拟代码

如何使用 mocha/sinon/chai 正确测试异步流错误事件处理?

】如何使用mocha/sinon/chai正确测试异步流错误事件处理?【英文标题】:HowdoIcorrectlytestasynchronousstreamerroreventhandlingwithmocha/sinon/chai?【发布时间】:2021-03-1415:38:37【问题描述】:我正在测试一个异步方法,该方法使用NodeJS中的本机h... 查看详情

如何无需在推荐的框架中编写测试用例即可获得 nodejs 应用程序的代码覆盖率?

...ameworks?【发布时间】:2021-10-2506:28:00【问题描述】:建议使用Mocha、chai或jest等框架来利用istanbul获取代码覆盖率。我设计了一个测试工 查看详情

为啥在成功通过测试用例后,使用 nodeunit 的 nodejs 测试用例一直在 webstorm 中加载?

】为啥在成功通过测试用例后,使用nodeunit的nodejs测试用例一直在webstorm中加载?【英文标题】:Whynodejstestcasewithnodeunitkeeploadinginwebstormaftersuccessfullypassedthetestcases?为什么在成功通过测试用例后,使用nodeunit的nodejs测试用例一直在w... 查看详情

cypress系列(12)-cypress编写和组织测试用例篇之断言(代码片段)

如果想从头学起Cypress,可以看下面的系列文章哦https://www.cnblogs.com/poloyy/category/1768839.html 前言断言是测试用例的必要组成部分没有断言,咱们就不知道测试用例的有效性,到底通过没通过Cypress的断言基于Chai断言库,并且增... 查看详情

如何使用 sinon 和 Mocha 模拟对 mysql 查询 nodeJS 的 Promisify 调用?

】如何使用sinon和Mocha模拟对mysql查询nodeJS的Promisify调用?【英文标题】:HowtomockpromisifycallonmysqlquerynodeJSusingsinonandMocha?【发布时间】:2021-12-1013:56:58【问题描述】:这是我使用mysql的代码-import*asmysqlfrom\'mysql\';importpromisifyfrom\'util\'... 查看详情

跟踪使用 Sinon/Mocha 调用方法的次数

】跟踪使用Sinon/Mocha调用方法的次数【英文标题】:TrackhowmanytimesmethodhasbeencalledwithSinon/Mocha【发布时间】:2018-07-0814:28:44【问题描述】:我正在使用Mocha/Sinon编写测试,以确保我创建的asynctryAtMost函数正在调用Promise并且仅重试该... 查看详情

使用 Sinon 进行单元测试:如何在回调中测试变量?

】使用Sinon进行单元测试:如何在回调中测试变量?【英文标题】:UnitTestingw/Sinon:HowdoItestavariableinsideofaCallback?【发布时间】:2019-05-0510:16:17【问题描述】:我正在与Sinon进行单元测试,以至少尝试让某些东西通过,但我不走运。... 查看详情

jmeter接口测试系列之测试用例编写和调用

在使用Jmeter进行接口测试时,首先需要根据接口定义,编写响应的接口测试用例,在编写接口测试用例时,我们根据测试的侧重点不同,使用不同的方式编译测试用例。一种是:整个请求参数作为一个变量,进行测试执行;一种... 查看详情

无法为 json rpc 测试用例自动化运行 nodejs 脚本

】无法为jsonrpc测试用例自动化运行nodejs脚本【英文标题】:Unabletorunnodejsscriptforajsonrpctestcaseautomation【发布时间】:2019-05-3008:50:09【问题描述】:我正在尝试运行为jsonrpc测试用例自动化编写的nodejs脚本。但是,我不断收到错误消... 查看详情

Mocha 测试用例不等待完成

...发布时间】:2017-06-1512:21:06【问题描述】:我正在Nodejs中使用mocha编写测试用例,并希望在运行测试之前重置数据库数据。我使用Knex作为查询生成器来执行查询。我写了以下逻辑:describe(\'Activities:\',function()before(funtion()acti 查看详情

Detox:条件测试用例编写

...sewriting【发布时间】:2019-12-0415:35:55【问题描述】:我是使用detox为ReactNative应用程序编写测试用例的新手。我已经编写了一些测试用例并按预期工作。是否可以在测试用例中添加条件,例如使用if-else。【问题讨论】:【参考方... 查看详情

sinon 存根带有用于单元测试的链式方法的 firebase 集合...(sinon,node/express,Jasmine)

...smine)【发布时间】:2021-06-2701:14:58【问题描述】:在我的nodejs代码中,我有一个sn-p:await 查看详情

如何使用 Rollup.js 捆绑使用 Sinon.js 的测试?

】如何使用Rollup.js捆绑使用Sinon.js的测试?【英文标题】:HowcanIbundlemytestswhichuseSinon.jsusingRollup.js?【发布时间】:2017-03-1301:37:27【问题描述】:我正在使用带有插件rollup-plugin-node-resolve和rollup-plugin-commonjs的Rollup.js来捆绑我的测试... 查看详情

如何使用 Jasmine 为以下 javascript 函数编写单元测试用例

】如何使用Jasmine为以下javascript函数编写单元测试用例【英文标题】:HowtowriteUnitTestCaseforbelowjavascriptfunctionusingJasmine【发布时间】:2019-04-1303:24:37【问题描述】:如何使用Jasmine为下面的javascript函数编写单元测试用例?functionGetURL... 查看详情

自动化单元测试(karma+mocha)(代码片段)

使用Karma+Mocha做单元测试Karma([?kɑrm?]卡玛)是一个测试运行器,它可以呼起浏览器,加载测试脚本,然后运行测试用例Mocha([?mo?k?]摩卡)是一个单元测试框架/库,它可以用来写测试用例Sinon(西农)是一个spy/stub/mock库,用以辅... 查看详情

使用 Sinon、redux 和 Karma 测试 axios 调用

】使用Sinon、redux和Karma测试axios调用【英文标题】:TestingaxioscallswithSinon,withreduxandKarma【发布时间】:2016-06-1319:39:06【问题描述】:你好在redux文档中进行测试,他们有这个例子来测试api调用:importconfigureMockStorefrom\'redux-mock-store\'... 查看详情

在nodejs中为持久功能活动创建单元测试用例

...【发布时间】:2022-01-0820:58:44【问题描述】:我正在尝试使用nodejs为持久功能活动创建单元测试。但是没有找到任何关于那个或任何东西的文件。我缺乏的地方是我不知道在创建测试用例时要通过什么上下文。任何帮助将不胜感... 查看详情

如何使用 Jest 和 Sinon 测试 Thunk 动作

】如何使用Jest和Sinon测试Thunk动作【英文标题】:HowtotestThunkactionswithJestandSinon【发布时间】:2017-09-1421:35:28【问题描述】:我正在创建一个简单的操作来使用Thunk从API获取一些数据。它看起来像这样:importfetchfrom\'isomorphic-fetch\';f... 查看详情