对函数的参数(即函数)进行单元测试

Unit testing a function's parameter that is a function

本文关键字:函数 单元测试 参数      更新时间:2023-09-26

我想知道如何为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];

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