Jasmine Test в Angular для контроллера

Я получаю следующую ошибку: TypeError: undefined is not a function Проблема в том, что общим является модуль и фабрика, и проблема в моей линии.

var ctrl = $controllerConstructor("resetPasswordSentScreen", { $scope: scope, common: common}); 

Вот полный тест:

describe('resetPasswordSentScreen', function () {

    var scope, $controllerConstructor;


    beforeEach(module('common', 'app'));

    beforeEach(inject(function($controller, $rootScope) {
        scope = $rootScope.$new();
        $controllerConstructor = $controller;
    }));

    it('it should navigate to the correct url when backToLogin is called ', function (common) {
        var ctrl = $controllerConstructor("resetPasswordSentScreen", { $scope: scope, common: common });
        var mocklocation = sinon.stub({ url: function () {}});
        expect(scope.backToLogin()).toBe(mocklocation.url);
    });
});

person Maria Christou    schedule 20.12.2013    source источник
comment
Не могли бы вы настроить скрипт js для этого?   -  person Michael Tempest    schedule 20.12.2013
comment
Привет, Майкл, и спасибо за быстрый ответ. jsfiddle.net/mariac/KvY5z   -  person Maria Christou    schedule 20.12.2013
comment
Похоже, $controller не вводится. Мой подход всегда такой: $NAME$ = $injector.get('$controller')($NAME$, {$scope: $scope});   -  person Malmi    schedule 20.12.2013
comment
Спасибо всем за вашу наблюдательность. У меня все еще есть проблема. Но на этот раз я думаю, что это мои ссылки   -  person Maria Christou    schedule 20.12.2013


Ответы (1)


Проблема не в этом, проблема в том, что вы не можете вставлять что-то в свои функции, как в свой код. Чтобы ввести, вам нужно вызвать inject, как вы это делали в beforeEach. Итак, если вы хотите внедрить эту фабрику, вам нужно это:

it("message", inject(function(common) {
 ...
}));

Вот как вы вводите. Это должно сработать.

person Jesus Rodriguez    schedule 20.12.2013
comment
Спасибо @Jesus Rodriguez. Я исправил проблему, но все еще есть проблема с моими ссылками - person Maria Christou; 20.12.2013
comment
Код, который вы показываете, правильный, единственной проблемой была инъекция. Вы уверены, что ваша ошибка именно в этой строке? Я построил пример с более или менее вашей идеей: plnkr.co/edit/uW4VMNJUqqZitCPLwkoS?p=preview - person Jesus Rodriguez; 20.12.2013
comment
Привет, Иисус, моя ошибка теперь, после добавления в мой it(), вводит следующее: Ошибка: [$injector:unpr] Неизвестный провайдер: cvAuthProvider ‹- cvAuth. И я объявил общий как: angular.module('common').factory('cvAuth', ['$http', '$cookieStore', cvAuth]); - person Maria Christou; 20.12.2013
comment
Настроены ли все зависимости в вашей TestRunning-Framework (например, Karma)? - person Malmi; 20.12.2013
comment
Привет @Malmi, я исправляю проблемы с моими зависимостями. Благодарю вас! jsfiddle.net/mariac/KvY5z/1 Теперь у меня есть следующая ошибка, которую я пытаюсь для решения TypeError: невозможно вызвать метод «путь» неопределенного. - person Maria Christou; 20.12.2013
comment
Вы делаете location = location Вы присваиваете переменную самой себе :P. Введите его, а затем назначьте. - person Jesus Rodriguez; 20.12.2013