我想知道如何为JavaScript中的函数参数编写单元测试。
例如,
_.forEach($scope.all, function(key, value) {
$scope.arr.push(key.name);
});
我可以在单元测试中输入forEach
函数,也可以访问第一个参数,但我无法访问function(key, value) {}
参数。
其次,那个函数参数叫什么?它只是一个匿名函数吗?
答案 0 :(得分:2)
在您的单元测试中,您不应该关注测试每个实现细节。您并不真正关心匿名功能,而是您的SUT的副作用或返回值符合预期。在调用函数后,您应该测试$scope.arr
是否包含预期的数据。
如果你真的需要访问该功能,那么你必须使用像间谍这样的东西记录调用_.forEach
的时间,然后访问该参数:
var forEachSpy = sinon.spy(_, 'forEach');
yourFn();
var forEachFn = forEachSpy.lastCall.args[1];
但同样,我认为以这种方式进行测试不会增加价值,只会导致脆弱的测试,这些测试在重构实现细节时仍然没有用处。例如,假设您将来使用常规Array
forEach;您的测试会中断,但您并不十分关心 如何遍历整个结构,只是您的范围是正确的。