[英]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.