0

Я пытаюсь проверить контроллер в качестве виртуальной машины, но получаю ошибкуОшибка при тестировании с жасмином John Papa контроллера в виртуальной машине

Основной модуль:

(function() { 
    'use strict'; 

    angular.module('ds', [ 
      'ionic', 
      'ui.router', 
      'ds.controllers', 
      'ds.services', 
      'ds.filters', 
      'underscore', 
      'ionicLazyLoad', 
      'ngCordova', 
      'ngIOS9UIWebViewPatch' 
     ]) 
})(); 

код контроллера, как показано ниже:

(function() { 
    'use strict'; 

    angular 
     .module('ds') 
     .controller('LoginCtrl', LoginCtrl); 

    LoginCtrl.$inject = ["$scope", "$rootScope"]; 

    function LoginCtrl($scope, $rootScope) { 

     var vm = this; 

     vm.model = { name: "controllerAs vm test" }; 

    } 
})(); 

мой тест жасмин:

'use strict'; 

    describe('LoginCtrl', function() { 
     var LoginCtrl; 
     beforeEach(module('ds')); 

     beforeEach(function() { 
      inject(function($injector) { 
       LoginCtrl = $injector.get('$controller')('LoginCtrl', {}); 
      }); 
     }); 

    it('LoginCtrl should be defined and LoginCtrl.name is equal to controllerAs vm test', function() { 
     expect(LoginCtrl).toBeDefined(); 
     expect(LoginCtrl.name).toEqual("controllerAs vm test"); 
    }); 
}); 

И получаю эту ошибку:

15 11 2016 14:40:33.608:INFO [watcher]: Changed file "/Users/roman.ishchiv/Documents/dogshows/www/modules/login/login.controller.js". 
PhantomJS 2.1.1 (Mac OS X 0.0.0) LoginCtrl LoginCtrl should be defined and LoginCtrl.name is equal to controllerAs vm test FAILED 
    /Users/roman.ishchiv/Documents/dogshows/www/lib/ionic/js/ionic.bundle.js:13218:53 
    [email protected]/Users/roman.ishchiv/Documents/dogshows/www/lib/ionic/js/ionic.bundle.js:9168:24 
    [email protected]/Users/roman.ishchiv/Documents/dogshows/www/lib/ionic/js/ionic.bundle.js:13178:12 
    [email protected]/Users/roman.ishchiv/Documents/dogshows/www/lib/ionic/js/ionic.bundle.js:13104:22 
    [email protected]/Users/roman.ishchiv/Documents/dogshows/www/lib/angular-mocks/angular-mocks.js:3074:60 
    [email protected]/Users/roman.ishchiv/Documents/dogshows/www/lib/angular-mocks/angular-mocks.js:3054:46 
    unit-tests/login.controller.test.js:8:15 
    [email protected]://localhost:9876/context.js:151:17 
    Expected undefined to be defined. 
    unit-tests/login.controller.test.js:14:38 
    [email protected]://localhost:9876/context.js:151:17 
    TypeError: undefined is not an object (evaluating 'LoginCtrl.name') in unit-tests/login.controller.test.js (line 15) 
    unit-tests/login.controller.test.js:15:25 
    [email protected]://localhost:9876/context.js:151:17 
PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.001 secs/0.017 secs) 

и эту часть моей кармы конфигурационного файла:

files: [ 
    '../lib/ionic/js/ionic.bundle.js', 
    '../lib/angular-mocks/angular-mocks.js', 
    '../lib/jquery/dist/jquery.js', 
    '../lib/angular-ui-router/release/angular-ui-router.js', 
    '../js/*.js', 
    '../js/**/*.js', 
    '../modules/**/*.js', 
    'unit-tests/*.js', 
], 

есть кто-либо предложения о том, как решить эту проблему или имеет руководство о том, как работать с Джоном Papa руководство по угловому стилю и модульное тестирование?

Спасибо!

+0

Проблема была в файле конфигурации кармы. Если и использует JQuery, и должны включать ее до ионного или углового файла Как это: файлов: [ «../lib/jquery/dist/jquery.js',» ../lib/ionic/js /ionic.bundle.js ', ' ../lib/angular-mocks/angular-mocks.js ', ..... ], –

ответ

1

Мы используем этот вид конструкции для тестирования (хотя мы используем ES6 против ES5):

let vm; 
inject((_$controller_, _$rootScope_) => { 
    vm = _$controller_(SomeControllerImport, 
    { $scope: _$rootscope.$new() }); 
}); 

Затем в тестах вы можете обратиться непосредственно к виртуальной машине, как вы бы внутри обычного кода контроллера:

expect(vm.foo).toHaveBeenCalled(); 

И так далее.