6

我正在开发一个使用节点的项目,我们正在尝试实现 100% 的功能覆盖。这是我们唯一没有测试过的函数,它在另一个函数中。

 var userInput = "";
    req.on("data", function(data){
      userInput += data;
    });

你如何去测试这个功能?我们尝试从另一个文件中导出函数,但没有成功。

我应该提到我们正在使用磁带作为测试模块。

4

2 回答 2

1

您需要在 req 上触发此“数据”事件。这样这个回调就会被调用。

例如,假设你有req你的测试,你可以做这样的事情(这是摩卡):

req.trigger('data', 'sampleData');
expect(userInput).to.equal('sampleData');
于 2015-10-22T18:29:18.660 回答
1

req.emit('data', {sampleData: 'wrongOrRightSampleDataHere'})应该这样做。实例化对象时httpreq请确保实例化一个新对象,以确保没有其他测试接收到此事件。

为了更完整...

var assert = require('assert')
function test() {
    var hasBeenCalledAtLeastOnce = false
    var userInput = "";
    // req must be defined somewhere though
    req.on("data", function(data){
        userInput += data;

       if(hasBeenCalledAtLeastOnce) {
          assert.equal(userInput, "HelloWorld", "userInput is in fact 'HelloWorld'")
       }
       hasBeenCalledAtLeastOnce = true 
    });

    req.emit('data', "Hello")
    req.emit('data', "World")

}

test()
于 2015-10-22T18:37:50.963 回答