Unidade testando um controlador modalInstance com Karma / Jasmine

EDIT: Solução rápida e suja no final deste post

Estou usando uma janela modal do AngularUI-Bootstrap da mesma forma que é explicada no site, exceto que eu dividi os arquivos. Portanto eu tenho:

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;

    });

e quando eu testar esse código com Karma (com oui-bootstrap-tpls.min.js arquivo carregado no arquivo de configuração do karma), recebo o seguinte erro:Erro: [$ injector: despr] [http://errors.angularjs.org/1.2.15-build.2389+sha.c5f2f58/$ injector / unf? p0 =% 24modalInstanceProvider% 20% 3C-% 20% 24modalInstance]1 em erro (nativo), o que significa que o jasmim não consegue encontrar o provedor para $ modalInstance.

Ainda não testei coisas neste controlador, ainda não, mas aqui está o meu arquivo de teste de jasmim:

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 () {

        });
    });

});

Você tem alguma pista sobre esse problema? Não é o primeiro módulo "externo" que eu uso (e teste) e fiz as mesmas coisas que para os outros, exceto que desta vez não funciona e não tenho idéia do porquê.

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

EDIT: Solução rápida e provavelmente suja:

Tudo bem, com base no método de escopo de escopo na instanciação do controlador do Jasmine, eu descobri como poderia "resolver" meu problema, mas provavelmente é bastante sujo, então fique à vontade para comentar se você encontrar uma maneira melhor de fazer o que pretendo .

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 () {

        });
    });

});

Dessa forma, o Jasmine não procura mais fornecedores, porque você já injetou os itens que deveriam estar precisando desses fornecedores. Funciona, mas acredito que poderia ser feito de uma maneira melhor ...

questionAnswers(3)

yourAnswerToTheQuestion