我有一种情况需要调用服务以使用请求参数获取实体块。 e.g。
app.controller('MainController', function($scope, $timeout) {
var chunkSize = 2,
params = [1,2,3,4,5,6];
$scope.invokeMultipleTimes = function () {
for (var i = 0; i < params.length; i += chunkSize) {
$scope.printParams(params.slice(i, i+chunkSize))
}
}
$scope.printParams = function (p) {
//doSomething
}
});
它使用不同的参数调用$scope.printParams
。
it('should invoke printParams multiple times', function() {
spyOn($scope, 'printParams');
$scope.invokeMultipleTimes();
expect($scope.printParams).toHaveBeenCalledWith([ 1, 2 ], [ 3, 4 ], [ 5, 6]);
});
以下是示例测试用例,但是说: 使用[[1,2],[3,4],[5,6]]调用预期的间谍printParams,但实际调用是[[1,2]],[[3,4]], [[5,6]]。
答案 0 :(得分:1)
基本问题是[1,2] !== [1,2]
,因为它们是不同的对象。
要解决这个茉莉花有jasmine.objectContaining
,它可以测试类似的对象,包括数组
将期望改为
expect($ scope.printParams).toHaveBeenCalledWith(jasmine.objectContaining([1,2])); expect($ scope.printParams).toHaveBeenCalledWith(jasmine.objectContaining([3,4])); expect($ scope.printParams).toHaveBeenCalledWith(jasmine.objectContaining([5,6]));
作品