Подтвердить что ты не робот

Angular mock `module`, в результате чего объект [Object object] не является функцией '

Я пытаюсь создать некоторые модульные тесты в Angular, используя Jasmine, проходящий через Teaspoon. Тесты выполняются, однако у меня есть простой тест, чтобы проверить наличие контроллера, который терпит неудачу. У меня есть следующая тестовая установка.

//= require spec_helper

require("angular");
require("angular-mocks");
var app = require("./app");


describe("My App", function() {

  describe("App Controllers", function() {

    beforeEach(module("app"))

    it("Should have created an application controller", inject(function($rootScope, $controller){
      var scope = $rootScope.$new();
      ctrl = $controller("ApplicationCtrl", { $scope: scope });
    }));

  })

})

Операторы require обрабатываются браузером, который обрабатывает мои зависимости, но я также могу подключить звездочки, которые я использую для вспомогательного элемента spec.

Внутри приложения, которое требуется, у меня есть

require("angular");
var controllers = require("./controllers");

var app = angular.module("app", [
  "app.controllers"
]);

exports.app = app;

Когда я запускаю этот тест, я получаю следующую ошибку:

Failure/Error: TypeError: '[object Object]' is not a function (evaluating 'module("aialerts")')

Я потратил немало времени, пытаясь понять это, но я понятия не имею, что происходит. Любая помощь была оценена.

4b9b3361

Ответ 1

У меня была та же проблема. Измените эту строку:

beforeEach(module("app"))

в

beforeEach(angular.mock.module("app"))

Ответ 2

Browserify использует Node -style require, где module - объект, который можно использовать для экспорта:

console.log(module); // {exports: {}}

angular -mocks.js пытается подключить функцию к window.module, но это невозможно в Browserify/Node.

Просматривая источник angular -mocks, кажется, что angular -моменты также привязывают функцию module к angular.mock. Поэтому вместо использования глобального объекта module вы должны использовать angular.mock.module.