Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在maven中运行测试时访问jasmine中的jQuery(window).height()时出错_Maven_Window_Jasmine - Fatal编程技术网

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

在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的方法有多安全

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

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

现在,使用mvn清洁安装mvn-o测试我得到了错误: 无法从null读取属性“clientHeight”


我认为这是因为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);
    }
  } 
})();