2015-05-06 3 views
0

Я хотел бы протестировать мой контроллер, я использовал «контроллер как» в приложении, теперь я испытываю себя за тестирование.Испытательный угловой контроллер с «AS»

Контроллер: (половина моего контроллера)

(function(){ 
    angular.module('donateApp') 
     .controller('MainCtrl', mainCtrl); 

    mainCtrl.$inject = ['donateFactory', 'donateService', '$location']; 

    function mainCtrl(donateFactory, donateService, $location){ 
     var vm = this, 
     checked = false; 

     vm.submitted = false; 
     vm.submitingForm = false; 
     vm.amounts = [ 
     5, 10, 25, 50, 100 
     ]; 
     vm.regions = donateService.getRegion(); 
     vm.states = donateService.getStates(); 

Тестирование:

'use strict'; 

describe('Controller: MainCtrl', function() { 

    // load the controller's module 
    beforeEach(module('donateApp')); 

    var MainCtrl, 
    scope; 

    // Initialize the controller and a mock scope 
    beforeEach(inject(function ($controller, $rootScope) { 
    scope = $rootScope.$new(); 
    MainCtrl = $controller('MainCtrl as ctrl', { 
     $scope: scope 
    }); 

    $scope.ctrl = MainCtrl; 
    })); 

    it('Expect the form start with submitted as false', function() { 
    expect(MainCtrl.ctrl.submitted).toBeTruthy(); 
    }) 
}); 

Сообщение об ошибке я получаю:

TypeError: 'undefined' is not an object (evaluating 'MainCtrl.ctrl') at /Applications/MAMP/htdocs/test/spec/controllers/main.js:22

Я знаю, что это должно быть небольшое исправление для заставить его работать ... любой может помочь?

Благодарности куч

+0

Почему вы ожидаете 'MainCtrl.ctrl' быть определены? Либо 'MainCtrl.submitted', либо' scope.ctrl.submitted' должны быть все, что вам нужно. Кроме того, вам не нужно назначать '$ scope.ctrl = MainCtrl' (и я предположил, что вы подразумеваете' scope.ctrl', поскольку '$ scope' не определен); '$ controller' делает это для вас автоматически, когда вы используете * контроллер как * синтаксис – Phil

+0

@Phil я краду эту идею от какого-то googling ... который должен быть неправильным, тогда ... спасибо, я попробую. – Bruce

+0

Справочная документация здесь ~ https://docs.angularjs.org/api/ng/service/$controller – Phil

ответ

1

Это должно покрыть его ...

var MainCtrl, scope; 

beforeEach(function() { 
    module('donateApp'); 

    inject(function($controller, $rootScope) { 
     scope = $rootScope.$new(); 
     MainCtrl = $controller('MainCtrl as ctrl', { 
      $scope: scope 
     }); 
    }); 
}); 

it('publishes the controller on the scope as ctrl', function() { 
    // you don't need this test, it's just to show you that 
    // scope.ctrl is set correctly when using the "controller as" syntax 
    expect(scope.ctrl).toBe(MainCtrl); 
}); 

it('Expect the form start with submitted as false', function() { 
    expect(MainCtrl.submitted).toBeFalsy(); 
}); 
+0

верьте или нет ... это все еще не работает, я проголосую за вас, как бы фил, спасибо за помощь :) – Bruce

+0

@ bluebill1049 Хе-хе, вот что я получаю за то, что не тестировал сам :) Что происходит? Вы получаете сообщения об ошибках? – Phil

+0

ТипError: 'undefined' не является объектом (оценка 'MainCtrl.submitted') \t в /Applications/MAMP/htdocs/test/spec/controllers/main.js:24 – Bruce

Смежные вопросы