【问题标题】:Node js Unit test sinon chaiNode js 单元测试 sinon chai
【发布时间】:2017-06-23 11:00:54
【问题描述】:

如何为下面的文件创建单元测试

index.ts

import ----
import ----

let workerService = new WorkerService();
let creatWorkerPromise = Promise.promisify(workerService.createWorkers);

creatWorkerPromise()
.then(function(){
    let kafkaService =  new KafkaService(kafkaConfig, workerService);
})
.catch(function (err: any) {
    console.log('Error while creating workers:', err);
});

【问题讨论】:

  • 您的问题太不清楚,无法回答。单元测试应该回答一些问题。你想测试什么?你想测试KafkaService 是否被某个配置调用,还是什么?如果这是一个模块,那么它的 API 是什么?
  • 谢谢@oligofren 在这里我想测试2个条件,1.如果成功console.log不应该调用,2.如果失败console.log应该被调用

标签: node.js unit-testing sinon chai


【解决方案1】:

测试不是单元的东西有点困难,因为单元通常会公开要测试的方法,所以我假设您最终会在测试代码中执行此操作。所以这里是:

///////////
// index.js
///////////
// stubs for this example to work
var createWorkerPromise = function(){ return Promise.resolve(); }
var workerService, kafkaConfig;
function KafkaService(){ throw new Error("crashes test"); }

function exportedFunction(){ 
  return createWorkerPromise()
    .then(function(){
        var kafkaService =  new KafkaService(kafkaConfig, workerService);
    })
    .catch(function (err) {
        console.log('Error while creating workers:', err);
    });
}

///////////
// test.js
///////////
var log = console.log.bind(console);
var assert = function(expr) {
  if(!expr) throw new Error("AssertionError"); 
  log("TEST OK");
}

// the test
var spy = sinon.spy(console, 'log');
exportedFunction().then(function test() {
  assert(spy.called);
  
}).catch(log.bind(null, "TEST FAILED"))
<script src="https://unpkg.com/sinon@latest/pkg/sinon.js"></script>

【讨论】:

猜你喜欢
  • 2023-04-11
  • 2018-02-13
  • 2018-11-05
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 1970-01-01
  • 2020-05-04
  • 2016-05-26
相关资源
最近更新 更多