Angularjs 角度模拟“模块”,导致';[对象]不是函数';

Angularjs 角度模拟“模块”,导致';[对象]不是函数';,angularjs,angular-mock,teaspoon,Angularjs,Angular Mock,Teaspoon,我试图用Jasmine在茶匙中运行来创建一些Angular的单元测试。这些测试正在运行,但是我有一个简单的测试来测试是否存在一个失败的控制器。我有以下测试设置 //= require spec_helper require("angular"); require("angular-mocks"); var app = require("./app"); describe("My App", function() { describe("App Controllers", functi

我试图用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处理,Browserify处理我的依赖项,但我也可以挂接到用于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")')

我花了很长时间试图弄明白这一点,但我不知道发生了什么。非常感谢您的帮助。

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

console.log(module); // {exports: {}}
angular-mocks.js尝试将函数附加到
window.module
,但这在Browserify/Node中是不可能的


通过查看,angular mock似乎还将
模块
函数附加到
angular.mock
。因此,您必须使用
angular.mock.module

而不是使用全局
module
对象,我也遇到了同样的问题。更改此行:

beforeEach(module("app"))
致:


Is
var-app=require(“./app”)加载角度
应用程序
模块?是的。我刚刚发布了那个文件的内容:)我不知道browserify和那种奇怪的东西。但是没有必要以这种方式在测试中加载你的应用程序(好吧,根据我对browserify的一点经验)。需求输出会发生什么?完全相同的问题。为什么我不必加载我的应用程序?当然我需要加载应用程序,以便它创建控制器供我测试?我知道我可以直接加载控制器进行测试,但我只想测试applicationHi@phoet中是否存在控制器,如果我已经回答了你的问题,你能接受答案吗?谢谢你,伙计!angular.mock.module就足够了,不需要在它之前放置window,因为我无法测试它,因为我更改了作业,但我假设它是正确的,并且如果在测试中使用严格模式,添加
window
前缀将不起作用。正如其他人所说,只需在其前面加上
angular.mock
@Dunc:link即可removed@DevAno1angular和Browserify都声明变量“module”,angular是一个函数,我相信Browserify是一个对象。在任何情况下,都需要显式调用“angular.mock.module”,以便使用正确的模块。嗯
beforeEach(angular.mock.module("app"))