如何在 jasmine 中使用 window 对象?

How can I use the window object in jasmine?

我正在尝试在 Jasmine 测试中使用 window 对象。

在测试文件中loader_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;

我在 运行 测试时收到一个参考错误,即 window 未定义。

我正在使用这个 boilerplate 进行这个测试,它使用 PhantomJS。

好吧 window 对象代表浏览器 window.If 你 运行 来自浏览器的 jasmine 单元测试然后它在你的脚本中可用否则它不可用。

运行 来自控制台意味着你是 运行 javascript 来自脚本 host.So 主机无法找到 Window对象。

浏览器选项不包括全局对象的别名,window和self。

例如浏览器:['Chrome']

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

$ gulp test:unit

上述 boilerplate runs plain mocha 中的任务测试并且不会启动浏览器。要访问 window 和其他特定于浏览器的对象,您应该将测试放在 /tests/integration 目录中,并且 运行 它们像这样:

$ gulp test:integration

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

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