2015-10-02 4 views
1

Я пытаюсь проверить мой контроллер AngularJS с помощью Jasmine с кармой. Когда я пытаюсь установить documented procedure для настройки теста контроллера, область $ не создается. На самом деле это выглядит так, как раньше не выполняется.Как представить свой контроллер в тестах Jasmine/Karma

Вот мой контроллер декларации:

angular.module("myApp", ["ngCookies"]) 
     .controller("myCtrl", function($scope, $window, $location, MyService, 
        $timeout, $log, $cookies, $q) { 

Мой тест выглядит следующим образом:

describe("MyController test", function() { 
var $scope; 

beforeEach(
    module("myApp", ["ngCookies"])); 
beforeEach(inject(function($rootScope, $controller) { 
    $scope = $rootScope.$new(); // It looks like this is never called 
    scope =$scope; 
    $controller("myCtrl", {$scope: $scope}); 
})); 
it("Checks the state of various units", function() { 

    ... 
}); 

Похоже, что материал beforeEach никогда не вызывается. Я предполагаю, что мне нужно ввести остальные свои свойства в контроллер, но если да, я не знаю, как это сделать.

Это ошибка в тестовом прогоне журнал

FAILED MyController test Checks myFunction starting from blank state 
Error: [$injector:modulerr] Failed to instantiate module ngCookies due to: 
Error: [ng:areq] Argument 'fn' is not a function, got string 
http://errors.angularjs.org/1.3.14/ng/areqp0=fn&p1=not%20a%20function%2C%20got%20string 
+1

Я вижу нечто очень похожее. В моем случае часть причины заключается в том, что inject() генерирует исключение (перед вызовом обратного вызова), что «модуль« angulartics »недоступен! Вы либо ошибочно написали имя модуля, либо забыли его загрузить. При регистрации модуля убедитесь, что вы определяете зависимости как второй аргумент. " Я передаю angularitics таким же образом, что вы проходите ngCookies. И я уверен, что включил его, возможно, не в том месте? Надеюсь, что любое предлагаемое здесь предложение поможет мне тоже! –

ответ

1

Моя исходная задача о которой я говорил в комментарии к вашему вопросу было то, что я пытался включить нон-минимизированы версию angulartics.js, и но такой вещи нет. Изменение angulartics.js на angulartics.min.js решило эту конкретную проблему для меня.

Таким образом, я исправил это, а затем получил то же сообщение об ошибке «Аргумент» fn «is not function», которое вы делаете.

Я понял, что оба нашего кода создавали новый модуль в вызове module() вместо того, чтобы извлекать существующий («myApp») модуль, который отличается от кода примера.

Затем я изменил код beforeEach() от:

module('Sheets', ['ngResource', 'angulartics', 'angulartics.google.analytics']); 

в

module('Sheets'); 

и теперь обратный вызов я прохожу впрыснуть действительно называется.

Гипотетически, можно попробовать изменить:

beforeEach(module("myApp", ["ngCookies"])); 

в

beforeEach(module("myApp")); 

... и посмотреть, если это получает его любой дальше.

Это еще только грузоподобное программирование с моей стороны, и я понятия не имею, почему это сработало, поэтому у меня есть еще кое-что, что нужно сделать, прежде чем я почувствую это. Если вы (или кто-либо еще) можете указать причину, по которой требуется получение существующего модуля или создание нового, обязательно для вас ответ или комментарий!

+0

Да, это заставило меня пройти мимо проблемы с областью. Это похоже на ошибку в документации Angular! Благодарю. Теперь я должен выяснить, как вводить все это в контроллер –