В настоящее время я тестирую контроллер в мокко. Контроллер имеет функцию активирования, которая должна срабатывать при успешном/неудачном запуске на основе ответа. Я не могу запустить функцию отказа или успеха во время моих тестов.Угловой мокко тест не увенчался успехом/ошибкой
viewController.js:
(function() {
'use strict';
angular
.module('app')
.controller('viewCtrl', viewCtrl);
function viewCtrl(Service) {
vm.Service = Service;
activate();
function activate() {
vm.Service.get().then(success, failure);
function success(data) {
if (!data || data == 401) {
failure(data);
}
}
function failure(error) {
if (error) {
console.error("Loading question failed:", error);
vm.Service.set();
}
}
}
}
})();
viewControllerTest.js:
describe('question_view_controller', function() {
var httpBackend, controller;
var expect = chai.expect;
var assert = chai.assert;
var Service = {};
var createController;
beforeEach(function(){
angular.mock.module('ui.router');
angular.mock.module('question');
Service = {
set : sinon.stub(),
get : sinon.stub().returns(Promise.reject({error:{}}));
}
})
beforeEach(inject(function($httpBackend,$controller,$q){
httpBackend = $httpBackend;
createController = function(){
return $controller('ViewCtrl', {
$scope: scope,
Service: Service
});;
}
}));
afterEach(function(){
httpBackend.verifyNoOutstandingExpectation();
httpBackend.verifyNoOutstandingRequest();
});
describe('activate', function() {
describe('get.then() error', function(){
beforeEach(function(){
Service.get.returns(Promise.reject({error:{}}))
})
it('should do nothing and setFailedQuestion should be called once', function(){
vm = createController();
scope.$digest();
expect(vm.Service.set.callCount).to.equal('1');
})
})
});
});
Если кто-то может указать на мою ошибку или предоставить какие-либо понять, что было бы здорово. Другие вопросы, пожалуйста, спросите.
ОБНОВЛЕНИЕ: Отредактированный код для отражения ответа danday74. Все еще не работает.
ОБНОВЛЕНИЕ: Отредактированный код для отображения комментария danday74. Все еще не работает.
Должен ли 'var QuestionService = {};' быть 'var Service = {};' в вашем viewControllerTest.js? В противном случае «Сервис», который вы объявляете в beforeEach, может быть не такой же «Службой», к которой вы обращаетесь в другом месте ... –
Да, это должно быть. Укрепится. – BobDoleForPresident
Помогло ли это? –