在maven中运行测试时访问jasmine中的jQuery(window).height()时出错
为了增加项目的测试覆盖率,我开始为现有的JS代码构建测试 其中一个现有模块使用jQuery将窗口高度放入一个变量中: var window_height=jQuery(window).height(); jQuery在内部使用clientHeight属性 现在,使用mvn清洁安装或mvn-o测试我得到了错误: 无法从null读取属性“clientHeight”在maven中运行测试时访问jasmine中的jQuery(window).height()时出错,maven,window,jasmine,Maven,Window,Jasmine,为了增加项目的测试覆盖率,我开始为现有的JS代码构建测试 其中一个现有模块使用jQuery将窗口高度放入一个变量中: var window_height=jQuery(window).height(); jQuery在内部使用clientHeight属性 现在,使用mvn清洁安装或mvn-o测试我得到了错误: 无法从null读取属性“clientHeight” 我认为这是因为Jasmine创建的“虚拟浏览器”没有window属性。有什么方法可以让它工作吗?我不能保证重写jQuery的方法有多安全
我认为这是因为Jasmine创建的“虚拟浏览器”没有window属性。有什么方法可以让它工作吗?我不能保证重写jQuery的方法有多安全,但下面是如何使用jasmine的
spyOn
函数来重写$(window).height()返回的内容
或者,在某个地方创建自己的getWindowHeight()函数会更安全,只需使用一个假的
spyOn
。感谢Derek的回答,覆盖jQuery.height的想法起到了作用,但不是在间谍中
(function(){
$.prototype.height = function() {
var original = $.prototype.height;
if (this[0] === window) {
return 800; // Return mock window height
} else {
return original.apply(this, arguments);
}
}
})();
在pom.xml中,我在jQuery之后直接将此文件包含在。btw中,当我运行mvn jasmine:bdd并在浏览器(localhost:8234)中检查测试结果时,没有问题……您能在“Before”方法中创建一个假“window”对象并设置clientHeight属性吗?谢谢您的回答,但问题在规范执行之前就开始了。。问题出现在一个源脚本中,它在init上获取窗口的高度。不过,我可以使用您的答案,按照您的建议覆盖jQuery.height属性,但是在全局范围内,而不是在间谍中。投票赞成这个建议!谢谢@Derek的回答。这很有效,但Derek的建议是一个更好的方法。Spies/stub的明确存在是为了防止您需要将测试代码添加到生产代码中。一个糟糕的做法有很多原因。。。
(function(){
$.prototype.height = function() {
var original = $.prototype.height;
if (this[0] === window) {
return 800; // Return mock window height
} else {
return original.apply(this, arguments);
}
}
})();