Подтвердить что ты не робот

Тестирование DOM-манипуляции в тесте Жасмина

Я создаю js-виджет, и первая часть - это добавить script width javascript, что-то вроде этого (пример из Google Analytics):

(function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

Как протестировать его с помощью жасмина (используя светильники?)?

4b9b3361

Ответ 1

Для настройки HTML-светильников в моих спецификациях я написал jasmine-fixture. С его помощью вы можете делать такие вещи:

var $foo, $input;
beforeEach(function(){
  $foo = affix('.foo');
    # appends to the DOM <div class="foo"></div> 
  $input = $foo.affix('input[id="name"][value="Jim"]');
    # appends <input id="name" value="Jim"/> beneath the .foo div

И после того, как он будет очищен после вас.

Для ожиданий о состоянии DOM я использую jasmine-jquery. Он предлагает тонну таких сочетаний, как та, которая приведена ниже:

it('is named Jim', function(){
  expect($input).toHaveValue("Jim");
});

Ответ 2

Я полагаю, вы могли бы выполнить свое действие, а затем проверить href на первом теге script так:

function addGA(){
    var ga = document.createElement('script'); 
    ga.type = 'text/javascript'; ga.async = true;
    ga.src = 
      ('https:' == document.location.protocol ? 'https://ssl' : 'http://www')
      + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; 
    s.parentNode.insertBefore(ga, s);
};

Спектр жасмина:

 var href = 'http://www.google-analytics.com/ga.js';
 expect(document.getElementsByTagName('script')[0].href).not.toEqual(href);
 addGa();
 expect(document.getElementsByTagName('script')[0].href).toEqual(href);

Было бы интересно услышать лучший метод. Проверка DOM с Жасмин всегда чувствует себя немного взломанным.

Ответ 3

Для интенсивного тестирования DOM с помощью Jasmine вы можете использовать Jasmine Headless WebKit.