Javascript 如何使用jasmine中的窗口对象?

Javascript 如何使用jasmine中的窗口对象?,javascript,jasmine,karma-jasmine,Javascript,Jasmine,Karma Jasmine,我试图在Jasmine测试中使用窗口对象 在测试文件loader\u spec.s中,我有: use strict; var setupModuleLoader = require(../src/loader); describe("setupModuleLoader", function() { it(exposes angular on the window, function() { setupModuleLoader(window); expect

我试图在Jasmine测试中使用
窗口
对象

在测试文件
loader\u spec.s
中,我有:

use strict;
var setupModuleLoader = require(../src/loader);

describe("setupModuleLoader", function() {
    it(exposes angular on the window, function() { 

      setupModuleLoader(window); 
      expect(window.angular).toBeDefined();

    }); 
});
loader.js
文件中,我有:

use strict;

function setupModuleLoader(window) {
  var angular = window.angular = {}; //creates empty angular object in browser's `window`
}

module.exports = setupModuleLoader;
我得到一个参考错误,当我运行测试时,
窗口
没有定义


我正在使用PhantomJS进行此测试。

窗口对象表示浏览器窗口。如果从浏览器运行jasmine单元测试,则它在脚本中可用,否则它不可用

从控制台运行表示您正在从脚本主机运行javascript。因此主机无法找到窗口对象

浏览器选项不包括全局对象、窗口和自身的别名


e、 g.浏览器:['Chrome']

如果您想访问
窗口
对象,您应该确保您的测试在浏览器中运行,而不是在node.js中运行

$ gulp test:unit
上述中的任务运行普通测试,不启动浏览器。要访问
窗口
和其他特定于浏览器的对象,您应该将测试放在
/tests/integration
目录中,并按如下方式运行它们:

$ gulp test:integration
让代码单元与执行上下文松散耦合是一种很好的做法,这就是样板文件中的单元测试不启动浏览器的原因。他们不希望代码单元知道有关
窗口
或其他浏览器对象的任何信息


当代码依赖于某些外部内容时,解决此问题的另一种方法是为依赖项创建模拟。

当使用Jasmin
angular
时,它将作为全局变量提供。检查用于加载模块的使用是否存在使用浏览器窗口对象的方法?为了提供一些上下文,我正在阅读一本从头开始构建angularjs的书,因此我实际上没有使用angularjs库。
it
函数的第一个参数应该是字符串吗。或者这是一个输入错误?您是从浏览器还是控制台运行jasmine测试?我正在控制台中运行它。没有打字错误。