Я пытаюсь выяснить, как протестировать ответ 403 в следующем коде. Код работает так, как ожидалось. Я понял, что использование 403 - не самый лучший вариант здесь, но сейчас это не в моих силах, и я не могу его изменить. Я новичок в тестировании JS, чувствую, что я что-то упускаю и дошел до конца своих знаний. Любая помощь будет оценена по достоинству.Тестирование Угловое обслуживание разрешить обещание в обратном вызове ошибки
this.joinItem = function(item, joinOption) {
var deferred = $q.defer(),
joinUrl = ('http://testurl.com/company/items/abc456/join', joinData),
joinData = {
match: {
minid: joinOption['id']
}
};
$http.post(joinUrl, joinData, { headers: headers })
.success(handleJoinSuccess)
.error(handleJoinError);
function handleJoinSuccess() {
deferred.resolve({status: 204});
};
function handleJoinError(joinedResponse, status) {
var joinedItems = joinedResponse['joined_items'];
if (status === 403) {
deferred.resolve({
joinedItems: joinedItems,
status: status
});
} else {
deferred.reject({
status: status
});
}
}
return deferred.promise;
};
Вот тест, который у меня есть до сих пор. Я не знаю, как это обещание решить. У меня может быть больше дерьма в этом тесте, чем нужно, но я так потерялся прямо сейчас, я понятия не имею.
describe('itemService', function() {
'use strict';
var subject;
beforeEach(inject(function (_itemService_) {
subject = _itemService_;
}));
describe('#joinItem 403', function() {
var $httpBackend,
$rootScope,
deferred,
item,
joinOption,
joinData,
joinedResponse,
joinRequest,
joinedItemsResults,
joinedItems;
beforeEach(inject(function(_$httpBackend_, $q, _$rootScope_) {
$httpBackend = _$httpBackend_;
$rootScope = _$rootScope_;
deferred = $q.defer();
item = { id: 'abc456' };
joinOption = { id: 'optID' };
joinData = { match: { minid: 'optID' } };
joinedResponse = { 'joined_products': []};
joinRequest = $httpBackend.whenPOST('http://testurl.com/company/items/abc456/join', joinData).respond(403);
joinedItemsResults = { joined_products: [], status: 403 };
}));
afterEach(function() {
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
});
describe('when request completes with 403 status', function() {
it('resolves the promise', function() {
var handler = jasmine.createSpy('error');
var promise = subject
.joinItem(item, joinOption);
promise.then(handler);
deferred.resolve(joinedResponse);
$rootScope.$digest();
$httpBackend.flush();
expect(promise).toBeResolvedWith(joinedItemsResults);
});
});
Спасибо за вашу помощь. Я знал, что, вероятно, я делаю это сложнее, чем нужно. Спасибо за пример jsfiddle. – mpowmap