angular mock`module`导致'[Object object]不是函数'

时间:2014-01-07 09:42:32

标签: angularjs angular-mock teaspoon

我正在尝试使用通过Teaspoon运行的Jasmine在Angular中创建一些单元测试。测试正在运行,但是我有一个简单的测试只是为了测试是否存在失败的控制器。我有以下测试设置。

//= 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 });
    }));

  })

})

需要的语句由Browserify处理,它处理我的依赖项,但我也可以挂钩我用于规范助手的链接。

在需要的应用内部,我有

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")')

我花了很长时间试图解决这个问题,但我不知道发生了什么。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:83)

我遇到了同样的问题。改变这一行:

beforeEach(module("app"))

为:

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

答案 1 :(得分:24)

Browserify使用节点样式require,其中module是可用于导出功能的对象:

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

angular-mocks.js尝试将函数附加到window.module,但在Browserify / Node中无法实现。

看一下angular-mocks source,看来角度模拟还会将module函数附加到angular.mock。因此,您必须使用module

,而不是使用全局angular.mock.module对象