单元测试函数与回调传递给另一个函数

时间:2014-08-28 02:01:46

标签: node.js

我不确定为函数foo进行单元测试的最佳方法是什么,因为回调被传递到功能栏,我编写的foo的单元测试也在测试函数栏。

有什么办法我只能测试foo里面的逻辑吗?在下面的用例中,我只想确保foo函数可以将值增加1然后将所有内容传递给bar。如何处理该值应该在条形单元测试中进行测试而不是foo单元测试。

function bar(value, callback) {
    value = value + 1;
    callback(value);
}

function foo(value, callback) {
    value = value + 1;
    bar(value, callback);
}


//test for function bar
it('should be able to increase value by 1', function (done) {
    bar(1, function (value) {
    expect(value).to.equal(2);
    done();
  });
});

//test for function foo
it('should be able to increase value by 2', function (done) {
    foo(1, function (value) {
    expect(value).to.equal(3);
    done();
   });
});

1 个答案:

答案 0 :(得分:1)

此代码或多或少类似于以下同步代码:

function bar(value) {
    value = value + 1;
    return value;
}

function foo(value) {
    value = value + 1;
    return bar(value);
}

既然我们正在寻找更熟悉的东西,我们可以再次提出您的问题。答案显然是否定的 - foo总是调用bar

如果您可以同时测试foobar,那么根据哪些失败,您可以找出错误的位置并不重要。

如果bar类似于数据库调用(您可能无法测试),那么您应该研究"模拟"功能/对象。如果bar不是应该被模拟的东西,但是应该在不使用foo的情况下测试bar,那么这表明bar可能应该作为参数传递到foo,而不是硬编码到该函数。