Модульное тестирование контроллера modalInstance с помощью Karma / Jasmine

РЕДАКТИРОВАТЬ: Быстрое и грязное решение в конце этого поста

Я использую модальное окно из AngularUI-Bootstrap так же, как это объясняется на сайте, за исключением того, что я разбил файлы. Поэтому у меня есть:

CallingController.js:

$scope.delete = function () {
    if ($scope.selected.length > 0) {
        // [...]
        // preparing data
        // [...]
        var modalInstance = $modal.open({
            templateUrl: 'views/modalView.html',
            controller: 'modalCtrl',
            resolve: {
                itemArray: function () {
                    return $scope.selected;
                }
            }
        });
        modalInstance.result.then(function (confirm) {
            if (confirm === true) {
                // [...]
                // treat
                // [...]
            }
        });
    }
};

modalController.js:

myAppControllers.controller('modalCtrl',
    function ($scope, $modalInstance, itemArray) {

        $scope.accept = function () {
            $modalInstance.close(true);
        };

        $scope.reject = function () {
            $modalInstance.close(false);
        };

        $scope.itemArray = itemArray;

    });

и когда я проверяю этот код с кармой (сUI-бутстраповские-tpls.min.js файл загружен в файл конфигурации кармы), я получаю следующую ошибку:Ошибка: [$ инжектор: unpr] [http://errors.angularjs.org/1.2.15-build.2389+sha.c5f2f58/$ Инжектор / unpr? Р0 =% 24modalInstanceProvider% 20% 3C-% 20% 24modalInstance]1 по ошибке (родной)Это означает, что жасмин не может найти поставщика для $ modalInstance.

Я даже не тестирую материал на этом контроллере, пока, но вот мой тестовый файл с жасмином:

testModalController.js:

describe('Controller: modalCtrl', function () {

    beforeEach(module('myApp'));

    var Ctrl;
    var scope;

    // Initialize the controller and a mock scope
    beforeEach(inject(
        function ($controller, $rootScope) {
            scope = $rootScope.$new();

            Ctrl = $controller('modalCtrl', { $scope: scope });
        })
    );

    describe('Initial state', function () {
        it('should instantiate the controller properly', function () {
            expect(Ctrl).not.toBeUndefined();
        });

        it('should initialize its values properly', function () {

        });
    });

});

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

==========================================

РЕДАКТИРОВАТЬ: Быстрое и, вероятно, грязное решение:

Итак, основываясь на методе макета области видимости в контроллере Jasmine, я выяснил, как можно «решить» мою проблему, но она, вероятно, довольно грязная, поэтому не стесняйтесь комментировать, если вы найдете лучший способ сделать то, что я намереваюсь ,

testModalController.js:

describe('Controller: modalCtrl', function () {

    beforeEach(module('myApp'));

    var Ctrl;
    var scope;
    var modalInstance;

    // Initialize the controller and a mock scope
    beforeEach(inject(
        function ($controller, $rootScope, _$modal_) {
            scope = $rootScope.$new();
            modalInstance = _$modal_.open({
                templateUrl: 'views/modalView.html'
            });

            Ctrl = $controller('modalCtrl', {
                $scope: scope,
                $modalInstance: modalInstance,
                itemArray: function () { return ['a', 'b', 'c']; }
            });
        })
    );

    describe('Initial state', function () {
        it('should instantiate the controller properly', function () {
            expect(Ctrl).not.toBeUndefined();
        });

        it('should initialize its values properly', function () {

        });
    });

});

Таким образом, Жасмин больше не ищет провайдеров, потому что вы уже ввели предметы, которые, как предполагается, нуждаются в этих провайдерах. Это работает, но я верю, что это можно сделать лучше ...

Ответы на вопрос(3)

Ваш ответ на вопрос