单元测试作为函数的函数参数

时间:2016-02-08 17:26:35

标签: javascript unit-testing lodash

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

例如,

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

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

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

1 个答案:

答案 0 :(得分:2)

在您的单元测试中,您不应该关注测试每个实现细节。您并不真正关心匿名功能,而是您的SUT的副作用或返回值符合预期。在调用函数后,您应该测试$scope.arr是否包含预期的数据。

如果你真的需要访问该功能,那么你必须使用像间谍这样的东西记录调用_.forEach的时间,然后访问该参数:

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

但同样,我认为以这种方式进行测试不会增加价值,只会导致脆弱的测试,这些测试在重构实现细节时仍然没有用处。例如,假设您将来使用常规Array forEach;您的测试会中断,但您并不十分关心 如何遍历整个结构,只是您的范围是正确的。