Я хотел бы протестировать мой контроллер, я использовал «контроллер как» в приложении, теперь я испытываю себя за тестирование.Испытательный угловой контроллер с «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
Я знаю, что это должно быть небольшое исправление для заставить его работать ... любой может помочь?
Благодарности куч
Почему вы ожидаете 'MainCtrl.ctrl' быть определены? Либо 'MainCtrl.submitted', либо' scope.ctrl.submitted' должны быть все, что вам нужно. Кроме того, вам не нужно назначать '$ scope.ctrl = MainCtrl' (и я предположил, что вы подразумеваете' scope.ctrl', поскольку '$ scope' не определен); '$ controller' делает это для вас автоматически, когда вы используете * контроллер как * синтаксис – Phil
@Phil я краду эту идею от какого-то googling ... который должен быть неправильным, тогда ... спасибо, я попробую. – Bruce
Справочная документация здесь ~ https://docs.angularjs.org/api/ng/service/$controller – Phil