Ошибка доступа к jQuery (window) .height () в jasmine при выполнении тестов в maven - PullRequest
2 голосов
/ 22 марта 2012

Чтобы увеличить охват тестами моего проекта, я начинаю создавать тесты для существующего кода JS.

Один из существующих модулей помещает высоту окна в переменную с помощью jQuery: var window_height = jQuery(окно) .height ();Внутренне jQuery использует свойство clientHeight.

Теперь с помощью mvn clean install или mvn -o test Я получаю сообщение об ошибке: Не удается прочитать свойство "clientHeight "от нуля

Я предполагаю, что это потому, что" виртуальный браузер ", который создает Жасмин, не имеет свойства окна.Есть ли способ заставить эту работу?

Ответы [ 2 ]

8 голосов
/ 23 марта 2012

Я не могу поручиться за то, насколько безопасно переопределять методы jQuery, но вот как вы можете использовать функцию spyOn jasmine для переопределения того, что возвращает $ (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 это с подделкой.

0 голосов
/ 26 марта 2012

Спасибо Дереку за ваш ответ, идея перезаписать 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 в.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...