Получение ошибки при использовании Jasmine с AngularJS

Я используюжасмин чтобы проверить мойAngularJs проект со следующим кодом

controllersSpec.js

describe('myApp', function(){

    beforeEach(angular.mock.module('myApp'));

    it('should have a mailctrl', function() {
        expect(myApp.mailctrl).toBeDefined();
    });
});

controller.js

var myApp = angular.module('myApp', []);

myApp.controller('mailctrl', ['$scope', '$routeParams', '$rootScope', 'getMailData', '$angularCacheFactory',

    function ($scope, $routeParams, $rootScope, getMailData, $angularCacheFactory) {
           ##....controller content....##
    }
]);

SpecRunner.html

<script type="text/javascript" src="../lib/angular/angular.min.js"></script> <script type="text/javascript" src="lib/jasmine-2.0.0/jasmine.js"></script> <script type="text/javascript" src="lib/jasmine-2.0.0/jasmine.js"></script> <script type="text/javascript" src="lib/jasmine-2.0.0/jasmine-html.js"></script> <script type="text/javascript" src="lib/jasmine-2.0.0/boot.js"></script> <script type="text/javascript" src="../test/lib/angular/angular-mocks.js"></script> <script src="../js/controller.js"></script> <script src="../test/unit/controllersSpec.js"></script>

Теперь, когда я открываюSpecrunner.html в браузере я получаю следующую ошибку

Ожидаемый неопределенный, чтобы быть определенным.
У меня есть следующий вопрос относительно выше

1) Где я ошибаюсь?
2) Как я могу использовать переменную $ rootScope контроллера?
3) В чем разницаbeforeEach (angular.mock.module ( 'MYAPP')); а такжеbeforeEach (angular.module ( 'MYAPP')); а такжеbeforeEach (модуль ( 'MYAPP'));

РЕДАКТИРОВАТЬ :

Я изменил код как

describe('myApp', function(){
    beforeEach(angular.mock.module('myApp'));        
    it('should have a mailctrl', inject(function($rootScope, $controller) {
        var controller = $controller('mailctrl', { $scope: $rootScope.$new(), $rootScope: $rootScope });
        expect(controller).toBeDefined();
}));

и получить следующую ошибку -

Ошибка: [$ инжектор: unpr]http://errors.angularjs.org/undefined/$ Инжектор / unpr? Р0 =% 24routeParamsProvider% 20% 20% 3C-% 24routeParams

Если я добавлю другие параметры в $ controller () (т. Е. '$ RouteParams', 'getMailData'), произойдет ошибка, поскольку они не определены.

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

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