Javascript 如何使用jasmine中的窗口对象?
我试图在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
窗口
对象
在测试文件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测试?我正在控制台中运行它。没有打字错误。