Тестирование модуля AngularJS с жасмином вызывает ошибку Жасмина

Я не могу получить простой тест Jasmine для работы с моим модулем AngularJS. Любые советы были бы очень оценены.

Модуль с контроллером:

(function(myApp) {
    myApp.App = angular.module("MyApp", []).
    config(["$routeProvider", function($routeProvider) {
    $routeProvider.
        when('/', { controller: "CoreAppController", templateUrl: 'App.html' }).
        otherwise({ redirectTo: '/' });
    }]);

    myApp.App.controller("CoreAppController", function($scope, $http, widgetService)     {
        /* controller definition */
    }
}(window.myApp = window.myApp || {}));

Модульный тест:

(function(myApp) {
    describe("CoreAppController spec", function() {
        describe("Create the CoreApp", function() {
            beforeEach(angular.module("MyApp"));
            describe("CoreAppController", function() {
                it("Should create the core application",
                    expect(1).toBeGreaterThan(0)
                )
            });
        })
    });
}(window.myApp = window.myApp || {}));

Файлы, включенные в тестовый файл, находятся в следующем порядке:

  • jasmine.js
  • жасмин-html.js
  • angular.min.js
  • angular.mock.js
  • app.js (содержит определение модуля и контроллера)
  • CoreAppControllerSpec.js (единичный тестовый файл).

Выполнение этого теста приводит к следующей ошибке:

TypeError: Object # не имеет метода 'apply'     в jasmine.Block.execute (файл: /// C: /TeamFoundation/PRE/test/jasmine/jasmine.js: 1064: 17)     в jasmine.Queue.next_ (файл: /// C: /TeamFoundation/PRE/test/jasmine/jasmine.js: 2096: 31)     на jasmine.Queue.start (файл: /// C: /TeamFoundation/PRE/test/jasmine/jasmine.js: 2049: 8)     в jasmine.Spec.execute (файл: /// C: /TeamFoundation/PRE/test/jasmine/jasmine.js: 2376: 14)     в jasmine.Queue.next_ (файл: /// C: /TeamFoundation/PRE/test/jasmine/jasmine.js: 2096: 31)     на jasmine.Queue.start (файл: /// C: /TeamFoundation/PRE/test/jasmine/jasmine.js: 2049: 8)     в jasmine.Suite.execute (файл: /// C: /TeamFoundation/PRE/test/jasmine/jasmine.js: 2521: 14)     в jasmine.Queue.next_ (файл: /// C: /TeamFoundation/PRE/test/jasmine/jasmine.js: 2096: 31)     на jasmine.Queue.start (файл: /// C: /TeamFoundation/PRE/test/jasmine/jasmine.js: 2049: 8)     в jasmine.Suite.execute (файл: /// C: /TeamFoundation/PRE/test/jasmine/jasmine.js: 2521: 14)

Удаление строки «module» из теста заставляет его пройти. Что я делаю не так?

1
Удалил анонимную функцию «myApp» и изменил код на добавление контроллера прямо к angular.module («MyApp»), и все же, единичный тест завершился с той же ошибкой.
добавлено автор jwest, источник

3 ответы

angular.module creates a new module.

module is an alias for angular.mock.module - published on window for easy access - which collects the module's configuration.

Вот почему изменение угловой модуляции в модуль решило вашу проблему.

С Уважением, Эйтан

5
добавлено

Лучшее решение состоит в том, чтобы включить angular-mocks.js сразу после скрипта angular.js , чтобы угловые-mocks определяли window.module = angular.mock .module = ... (а также window.inject и т. д.).

0
добавлено

Как ни странно, изменение «angular.module» на «модуль» решило проблему!

0
добавлено
Angular — русскоговорящее сообщество
Angular — русскоговорящее сообщество
3 960 участник(ов)

Общаемся на темы Angular 4+, его экосистемы, TypeScript, NativeScript и т.д. По вопросам SSR, Angular Universal @angular_universal_ru См. также: @typescript_ru, @react_js, @nodejs_ru, @js_ru Вакансии и поиск работы: @javascript_jobs

Angular.js (1.x) — русскоговорящее сообщество
Angular.js (1.x) — русскоговорящее сообщество
704 участник(ов)

Общаемся и обсуждаем темы, посвященные Angular 1.x и экосистеме.

AngularJS, Javascript
AngularJS, Javascript
370 участник(ов)

Angularjs russian chat