为了提高项目的测试覆盖率,我开始为现有的JS代码构建测试。
其中一个现有模块使用jQuery将窗口高度放在一个变量中: var window_height = jQuery(window).height(); 内部jQuery使用clientHeight属性。
现在使用 mvn clean install 或 mvn -o test 我收到错误消息: 无法读取属性" clientHeight"来自null
我认为这是因为"虚拟浏览器" Jasmine创建的并没有窗口属性。有没有办法让这项工作?
答案 0 :(得分:8)
我无法保证覆盖jQuery的方法有多安全,但是这里你可以使用jasmine的spyOn
函数来覆盖$(window).height()返回的内容。
it("can override jquerys height function", function() {
var original = $.prototype.height;
spyOn($.prototype, 'height').andCallFake(function() {
if (this[0] === window) {
return 5; // whatever you want the window height to appear to be
} else {
return original.apply(this, arguments);
}
});
// window height gets overridden
expect($(window).height()).toEqual(5);
// everything else uses the actual jQuery call
expect($("body").height()).toBeGreaterThan(5);
});
或者,在某处创建自己的getWindowHeight()函数会更安全,只有spyOn
这样做是假的。
答案 1 :(得分:0)
感谢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中包含了这个文件。