gpt4 book ai didi

angularjs - 将 Jasmine spyOn 与 $resource 一起使用

转载 作者:行者123 更新时间:2023-12-02 01:46:43 25 4
gpt4 key购买 nike

我正在尝试使用 Jasmine spy 来测试在 $resource 上调用查询的 Controller 。当我按如下方式编写对资源的调用时,我可以获得成功的测试(下面链接的 plunk 中的实现 1)

function($scope, bagelApiService) {
bagelApiService
.query()
.$promise
.then(function(bagelsResponse) {
$scope.bagels = bagelsResponse;
$scope.somethingAfterBagelsLoad = true;
});
}

但我宁愿这样调用资源(下面链接中的实现 2)

 function($scope, bagelApiService) {
bagelApiService.query(function(bagelsResponse) {
$scope.bagels = bagelsResponse;
$scope.somethingAfterBagelsLoad = true;
});
}

这是我的规范

describe('BreakfastCtrl', function() {
var $q,
$rootScope,
_scope,
mockBagelsResponse = [{name: 'foobagel'}, {name: 'barbagel'}];

beforeEach(module('BreakfastApp'));

beforeEach(inject(function($controller, $q, $rootScope, bagelApiService) {
_scope = $rootScope.$new();

var queryDeferred = $q.defer();

spyOn(bagelApiService, 'query').andReturn({$promise: queryDeferred.promise});

$controller('BreakfastCtrl', {
'$scope': _scope,
'bagelApiService': bagelApiService
});

queryDeferred.resolve(mockBagelsResponse);
$rootScope.$apply();
}));


it('should set scope.bagels', function() {
expect(_scope.bagels).toEqual(mockBagelsResponse);
});

});

知道为什么实现 2 未通过测试(即使它运行良好),以及如何编写测试以通过实现 2?

click here for plunk

最佳答案

这是因为你没有完全模仿query()

它应该是这样的(至少要使您的两个实现都有效)。

spyOn(bagelApiService, 'query').andCallFake(function (callback) {
queryDeferred.promise.then(callback);
return { $promise: queryDeferred.promise };
});

示例 Plunker: http://plnkr.co/edit/wGAytf5ASSJwut4WUwGO?p=preview

关于angularjs - 将 Jasmine spyOn 与 $resource 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25218289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com