繁体   English   中英

对作为功能的功能参数进行单元测试

[英]Unit testing a function's parameter that is a function

我想知道如何为JavaScript中的函数参数编写单元测试。

例如,

_.forEach($scope.all, function(key, value) {
   $scope.arr.push(key.name);
});

我可以在单元测试中输入forEach函数,也可以访问第一个参数,但无法访问function(key, value) {}参数。

其次,该函数参数叫什么? 它只是一个匿名函数吗?

在单元测试中,您不必担心测试每个实施细节。 您实际上并不在乎那个匿名函数,而只是在担心SUT的副作用或返回值符合期望。 调用函数后,应测试$scope.arr包含预期的数据。

如果确实需要访问该函数,则必须使用诸如间谍之类的东西来记录_.forEach的调用时间,然后访问该参数:

var forEachSpy = sinon.spy(_, 'forEach');
yourFn();
var forEachFn = forEachSpy.lastCall.args[1];

但是,我再次指出,以这种方式进行测试不会增加价值,只会导致脆弱的测试,这些测试在重构实现细节时仍然没有用。 例如,假设您将来使用常规的Array forEach; 您的测试可能会失败,但是您并不真正在乎如何遍历结构,只是您的范围是正确的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM