0

Я потратил часы, пытаясь настроить модульное тестирование на существующую базу кода углового кода. Я считаю, что я поставил проблему до одной странности в нашем коде по сравнению с предлагаемой реализацией из документов углового.Не удалось ввести контроллер в тест Karma

Мы создаем экземпляр нашего модуля с помощью var app= angular.module(...), тогда как примеры, которые я нашел, используют angular.module(...). Будет ли это требовать от меня ссылки на модуль по-разному в приведенном ниже beforeEach?

Версия Детали:

  • AngularJS v1.2.7
  • радиально-Mocks v1.2.7

myController.js:

app.controller('myController', function (
    $scope, 
    $rootScope, 
    $location, 
    $window, 
    globalServices, 
    $routeParams, 
    $sce) { 
    ... 
} 

Sample.spec.js:

describe('myController', function() { 

    beforeEach(module('app')); 

    describe('tests', function() { 
    var scope, controller; 

    beforeEach(inject(function($controller) { 
     scope = {}; 
     controller = $controller('myController', { $scope: scope }); 
    }));  

    it('should define controller', function() { 
     expect(controller).toBeDefined(); 
    }); 

    }); 
}); 

app.js

var app = angular.module('app', [ 
    'ngRoute', 
    'ui.bootstrap', 
    'ui.tinymce', 
    'ngResource', 
    'ngCookies', 
    ... 
]); 

karma.conf.js:

//jshint strict: false 
module.exports = function(config) { 
    config.set({ 

    basePath: './', 

    files: [ 
     'Scripts/angular.min.js', 
     'Scripts/angular-mocks.js',  
     'Scripts/angular-route.min.js', 
     'Scripts/angular-resource.js', 
     'Scripts/angular-cookies.min.js', 
     'Scripts/ui-sortable.js', 
     'Scripts/angular-strap.min.js',  
     'Scripts/jquery.min.js', 
     'tinymce/tinymce.min.js',  
     'Scripts/ui-bootstrap-tpls-0.4.0.js', 
     'tinymce/jquery.tinymce.min.js', 
     'app/directives/adapt/adapt.js', 
     'app/app.js', 
     'app/controllers/myController.js', 
     'app/tests/Sample.spec.js'  
    ], 

    autoWatch: true, 

    frameworks: ['jasmine'], 

    browsers: ['PhantomJS'], 

    logLevel: config.LOG_DEBUG, 

    plugins: [ 
     'karma-phantomjs-launcher', 
     'karma-jasmine', 
     'karma-junit-reporter', 
     'phantomjs-polyfill' 
    ], 

    reporters: ['progress'] 

    }); 
}; 

Я получаю следующее сообщение об ошибке: Error: $injector:modulerr Module Error Failed to instantiate module app due to: {1}

Если я закомментировать код контроллера, то module('app') не будет выдавать ошибку.

Большое спасибо за помощь. Я ударил стену этим.

+0

Я не вижу, как вы создадите свой модуль, это будет иметь значение. Позвольте мне посмотреть на это немного дольше. Вы получаете какое-то сообщение об ошибке? – Maccurt

+0

лучшим способом было бы использовать 'beforeEach' – batmaniac7

+0

вы могли бы также показать нам свой код контроллера? – Maccurt

ответ

1

Убедитесь, что все зависимости от модуля решены, эта проблема возникает, когда вы пытаетесь ввести службу, которая не была загружена.

+1

хорошо, но как? Я проверил и все, кажется, включено –

+0

@ M.Octavio - Хотел бы я знать. Я думал, что щедрость привлечет некоторую помощь. Единственный способ, которым я разрешил это, - это утроить все по одному. – Ryan27

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