在maven中运行测试时访问jasmine中的jQuery(window).height()时出错

时间:2012-03-22 11:13:27

标签: maven window jasmine

为了提高项目的测试覆盖率,我开始为现有的JS代码构建测试。

其中一个现有模块使用jQuery将窗口高度放在一个变量中:     var window_height = jQuery(window).height(); 内部jQuery使用clientHeight属性。

现在使用 mvn clean install mvn -o test 我收到错误消息: 无法读取属性" clientHeight"来自null

我认为这是因为"虚拟浏览器" Jasmine创建的并没有窗口属性。有没有办法让这项工作?

2 个答案:

答案 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中包含了这个文件。