Testing controller angularjs with Jasmine

I’m trying test a controller with a promise but the attempts were invalid. The method in question is the iniciar(). The fact is: i’m not even any idea how test this…

Controller code:

    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();
        }

The test that i made:

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);        
    });
});

The error in question:

 TypeError: undefined is not an object (evaluating 'vm.proposta.cotacao') in src/app/spas/contratacao/condutorTaxi/detalhamento/condutorTaxiDetalhamento-controllers.js
   (line 9)[email protected]/app/spas/contratacao/condutorTaxi/detalhamento/condutorTaxiDetalhamento-controllers.js:9:2029
[email protected]/app/spas/contratacao/condutorTaxi/detalhamento/condutorTaxiDetalhamento-controllers.js:9:1093
spec/app/spas/contratacao/condutorTaxi/detalhamento/condutorTaxiDetalhamentoSpec.js:56:51

So… i just need a idea where i’m wrong or how can made this test with a excelent coverage.

Thanks a lot!

Source: AngularJS