如何在茉莉花中使用窗口对象?

时间:2015-12-03 05:38:45

标签: javascript jasmine karma-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

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

2 个答案:

答案 0 :(得分:0)

窗口对象代表浏览器窗口。如果您从浏览器运行jasmine单元测试,那么它在您的脚本中可用,否则无法使用。

从控制台运行意味着您正在从脚本主机运行javascript。因此主机无法找到 Window 对象。

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

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

答案 1 :(得分:0)

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

$ gulp test:unit
上述boilerplate中的

任务运行普通mocha测试,但未启动浏览器。要访问window和其他特定于浏览器的对象,您应该将测试放在/tests/integration目录中并按以下方式运行:

$ gulp test:integration

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

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