使用Jasmine测试控制器angularjs

时间:2019-06-12 16:26:09

标签: angularjs unit-testing

我正在尝试对带有承诺的控制器进行测试,但是这些尝试均无效。有问题的方法是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

所以...我只需要知道我错了或者如何才能在出色的覆盖率下进行这项测试。

非常感谢!

0 个答案:

没有答案