我的范围内有一个函数可以在用户单击按钮或触发某些事件并自动调用此函数时检索我的服务状态。
这是我的功能,在我使用的控制器中定义:
$scope.getStatus = function() { $http({method: 'GET', url: config.entrypoint + config.api + '/outbound/service/' + $scope.serviceId}) .success(function(data) { $scope.errorMessage = ''; $scope.serviceAllGood = data; }) .error(function() { $scope.serviceAllGood = ''; $scope.errorMessage = 'We are experiencing problems retrieving your service status.'; }); }
单元测试如下:
describe('SendServiceCtrl', function(){ var scope, ctrl, $httpBackend, configuration; beforeEach(function () { module('papi', 'ngUpload'); }); beforeEach(inject(function(_$httpBackend_, $rootScope, $controller, config) { configuration = config; $httpBackend = _$httpBackend_; $httpBackend.expectGET(configuration.entrypoint + configuration.api + "/user/outboundstatus/").respond(200, {"meta":{"apiVersion":"0.1","code":200,"errors":null},"response":{"allowed":false}}); scope = $rootScope.$new(); ctrl = $controller('SendServiceCtrl', {$scope: scope}); })); it('Should get the status', function() { scope.serviceId = '09bb5943fa2881e1'; scope.getStatus(); $httpBackend.whenGET(configuration.entrypoint + configuration.api + '/outbound/service/' + scope.serviceId).respond(200, {"meta":{"apiVersion":"0.1","code":200,"errors":null}}); }); });
在单元测试中,我还在同一个控制器上进行了其他$ httpBackend测试,但是所有这些仅能正常工作。我究竟做错了什么?
您需要whenGET 在 调用方法 之前 提供。
whenGET
it('Should get the status', function() { scope.serviceId = '09bb5943fa2881e1'; $httpBackend.whenGET(configuration.entrypoint + configuration.api + '/outbound/service/' + scope.serviceId).respond(200, {"meta":{"apiVersion":"0.1","code":200,"errors":null}}); scope.getStatus(); });
设置请求的期望,然后触发请求。
希望这可以帮助。