我正在尝试对带有承诺的控制器进行测试,但是这些尝试均无效。有问题的方法是iniciar()。事实是:我什至不知道如何测试这个……
控制器代码:
angular.module('condutorTaxiDetalhamentoControllers',
[]).controller('CondutorTaxiDetalhamentoController',
CondutorTaxiDetalhamentoController);
CondutorTaxiDetalhamentoController.$inject = [
'$rootScope',
'$location',
'SVLQuestionarioService',
'SVLCondutorQuestionarioService'
];
function CondutorTaxiDetalhamentoController(
$rootScope,
$location,
SVLQuestionarioService,
SVLCondutorQuestionarioService) {
var vm = this;
vm.proposta = $rootScope.proposta;
//Funções
vm.iniciar = iniciar;
vm.voltar = voltar;
vm.prosseguir = prosseguir;
function iniciar() {
vm.mostrarPagina = true;
buscarItemQuestaoQuestionario().then(function () {
return buscarQuestionarioCriado();
}).then(function () {
return tratarQuestionarioCriado();
}).then(function () {
return buscarCondutorQuestionarioCriado();
}).then(function ()
{if(vm.proposta.cotacao.itemCotacao.questionario.codigoRespostaQuantidadeCondutor === 1460){
vm.indicadorDoisCondutores = true;
}
});
}
function buscarItemQuestaoQuestionario() {
return SVLQuestionarioService.buscarItemQuestaoQuestionario(vm.proposta.cotacao.produtoVersao).then(function(mapaCamposQuestionario) {
vm.listaTempoHabilitacao = mapaCamposQuestionario[395];
});
}
function buscarQuestionarioCriado() {
return SVLQuestionarioService.buscarQuestionarioCriado(vm.proposta.cotacao).then(function (listaQuestaoQuestionario) {
vm.proposta.cotacao.itemCotacao.questionario = {};
vm.proposta.cotacao.itemCotacao.questionario.listaQuestaoQuestionario = listaQuestaoQuestionario;
}).catch();
}
function tratarQuestionarioCriado(){
return SVLQuestionarioService.tratarQuestionarioCriado(vm.proposta.cotacao.itemCotacao.questionario.listaQuestaoQuestionario).then(function(questionario) {
vm.proposta.cotacao.itemCotacao.questionario = questionario;
}).catch();
}
function buscarCondutorQuestionarioCriado() {
return SVLCondutorQuestionarioService.buscarCondutorQuestionarioCriado(vm.proposta.cotacao).then(function (listaCondutorQuestionario) {
vm.proposta.cotacao.itemCotacao.questionario.listaCondutorQuestionario = listaCondutorQuestionario;
vm.proposta.cotacao.itemCotacao.questionario.condutorQuestionario = listaCondutorQuestionario[0];
}).catch();
}
我所做的测试:
describe('Testando condutorTaxiDetalhamentoController', function(){
var $scope;
var $controllerTest;
var questionarioServiceTest;
var condutorQuestionarioTest;
var condutorTaxiDetalhamentoController;
var $q;
var deferred;
beforeEach(angular.mock.module('condutorTaxiDetalhamentoControllers'));
beforeEach(angular.mock.module('questionarioServices'));
beforeEach(angular.mock.module('condutorQuestionarioServices'));
beforeEach(angular.mock.module('servicesUtil'));
beforeEach(inject(function($controller, $rootScope, SVLQuestionarioService, SVLCondutorQuestionarioService, _$q_){
$q = _$q_;
$scope = $rootScope.$new();
$controllerTest = $controller;
questionarioServiceTest = SVLQuestionarioService;
condutorQuestionarioTest = SVLCondutorQuestionarioService;
deferred = _$q_.defer();
spyOn(questionarioServiceTest, 'buscarItemQuestaoQuestionario').and.returnValue(deferred.promise);
condutorTaxiDetalhamentoController = $controller('CondutorTaxiDetalhamentoController', {
$scope : $scope,
questionarioServiceTest : SVLQuestionarioService,
condutorQuestionarioTest : SVLCondutorQuestionarioService
});
}));
//Testes unitários:
it('Verificando existência da Controller', function(){
expect(condutorTaxiDetalhamentoController).toBeDefined();
});
it('Verificando existência da Service - SVLQuestionarioService', function(){
expect(questionarioServiceTest).toBeDefined();
});
it('Verificando existência da Service - SVLCondutorQuestionarioService', function(){
expect(condutorQuestionarioTest).toBeDefined();
});
it('Testando o método iniciar da controller', function(){
//Ambiente
spyOn(condutorTaxiDetalhamentoController, 'iniciar').and.callThrough();
//Ação
condutorTaxiDetalhamentoController.iniciar();
//Teste
expect(condutorTaxiDetalhamentoController.iniciar).toBe(somethingIdontKnow);
});
});
有问题的错误
TypeError: undefined is not an object (evaluating 'vm.proposta.cotacao') in src/app/spas/contratacao/condutorTaxi/detalhamento/condutorTaxiDetalhamento-controllers.js
(line 9)buscarItemQuestaoQuestionario@src/app/spas/contratacao/condutorTaxi/detalhamento/condutorTaxiDetalhamento-controllers.js:9:2029
iniciar@src/app/spas/contratacao/condutorTaxi/detalhamento/condutorTaxiDetalhamento-controllers.js:9:1093
spec/app/spas/contratacao/condutorTaxi/detalhamento/condutorTaxiDetalhamentoSpec.js:56:51
所以...我只需要知道我错了或者如何才能在出色的覆盖率下进行这项测试。
非常感谢!