我正在尝试在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进行此测试。
答案 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
或其他浏览器对象的任何信息。
当代码依赖于某些外部内容时,另一种解决问题的方法是为依赖项创建模拟。