25

我正在尝试使用通过 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 });
    }));

  })

})

require 语句由处理我的依赖项的 Browserify 处理,但我也可以连接到我用于规范助手的 sprockets。

在需要的应用程序中,我有

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

我花了很长时间试图弄清楚这一点,但我不知道发生了什么。任何帮助表示赞赏。

4

2 回答 2

83

我有同样的问题。更改此行:

beforeEach(module("app"))

至:

beforeEach(angular.mock.module("app"))
于 2014-08-13T12:20:11.667 回答
24

Browserify 使用 Node-style require,其中module是一个可用于导出功能的对象:

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

angular-mocks.js 尝试将函数附加到window.module,但这在 Browserify/Node 中是不可能的。

查看angular-mocks 源代码,似乎 angular-mocks 也将module函数附加到angular.mock. 因此module,您必须使用angular.mock.module.

于 2014-06-20T22:05:05.447 回答