gpt4 book ai didi

javascript - Angular 单元测试 .catch block

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

我有一个 Controller 和服务,我已经为其编写了一些单元测试。服务执行http请求, Controller 有.then.catch block 。我可以测试.then block 没有问题,但是如何测试.catch

Controller :

$scope.performPost = function (action) {

$scope.shoppingCart = function() {
$scope.loading = true;
$scope.acText = '';

myService.postAction('cart', $scope.myData)
.then(function(data) {
$timeout(function(){
$scope.loading = false;
$scope.tick = true;
}, 1500);
})
.catch(function() {
$scope.errorException();
});
};

switch(action) {
case "viewShoppingCart":
$scope.shoppingCart();
break;
case "updateProfile":
$scope.updateUserDetails();
break;
}
};

测试.then:

describe("MyController Tests", function() {

var scope;
var ctrl;

var customer = {
"accountId" : "12345678901",
"firstName" : "Joe",
"lastName" : "Bloggs",
};

var unlockRespone = {};

beforeEach(inject(function($rootScope, $controller, myService, _$q_, $httpBackend, $timeout) {
scope = $rootScope.$new();
rootScope = $rootScope;
mockMyService = myService;
pingUrl = "http://server:80/ping";
httpBackend = $httpBackend;
timeout = $timeout;

var unlockDeferred = _$q_.defer();
unlockDeferred.resolve(unlockRespone);
spyOn(mockMyService, 'postAction').and.returnValue(unlockDeferred.promise);

spyOn(rootScope, '$broadcast').and.callThrough();

ctrl = $controller('MyController', {$scope:scope, myService:mockMyService});

spyOn(scope, 'performPost').and.callThrough();
}));

it("Should call the viewShoppingCart function", function() {
httpBackend.expectGET(pingUrl).respond({ status: "OK" });
scope.performPost('viewShoppingCart');
timeout.flush(4000);
expect(scope.loading).toBeFalsy();
expect(scope.tick).toBeTruthy();
});
});

最佳答案

describe("MyController Tests", function() {

var scope;
var ctrl;
var $q;

var customer = {
"accountId" : "12345678901",
"firstName" : "Joe",
"lastName" : "Bloggs",
};

var response = {};

beforeEach(inject(function($rootScope, $controller, myService, _$q_, $httpBackend, $timeout) {
scope = $rootScope.$new();
rootScope = $rootScope;
mockMyService = myService;
pingUrl = "http://server:80/ping";
httpBackend = $httpBackend;
timeout = $timeout;
$q = _$q_;




spyOn(rootScope, '$broadcast').and.callThrough();

ctrl = $controller('MyController', {$scope:scope, myService:mockMyService});

spyOn(scope, 'performPost').and.callThrough();
}));

it("calls then", function() {
var deferred = $q.defer();
deferred.resolve(response);

spyOn(mockMyService, 'postAction').and.returnValue(deferred.promise);

// test code for then
});

it("calls catch", function() {
var deferred = $q.defer();
deferred.reject(response);

spyOn(mockMyService, 'postAction').and.returnValue(deferred.promise);

// test code for catch
});
});

关于javascript - Angular 单元测试 .catch block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35222029/

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