Зареждане на шпионски елемент Jasmine

Създавам динамично някои скриптове като този:

  var js1 = document.createElement('script');
  js1.type = 'text/javascript';
  js1.src = '/js-1.js';
  docmuent.body.appendChild(js1);
  js1.onload = function() {
     var js2 = document.createElement('script');
     js2.type = 'text/javascript';
     js2.src = '/js-2.js';
     document.body.appendChild(js2);
  };

Ето моята спецификация:

  it('Tests inject script', function() {
    expect($("script[src*='/js-1.js']").length).toBeGreaterThan(0);
    expect($("script[src*='/js-2.js']").length).toBeGreaterThan(0);
  });

Тестът на js-2 винаги се проваля. Как мога да шпионирам js-1 onload събитие?


person hjrshng    schedule 30.12.2013    source източник
comment
Има същия проблем с тестването на обратно извикване на image.onload   -  person ASergey    schedule 17.09.2015


Отговори (2)


Мисля, че проблемът може да е във вашата поръчка. Трябва да създадете маркера script, да го добавите към body, да зададете onload и след това да зададете src.

var js1 = document.createElement('script');
js1.type = 'text/javascript';
docmuent.body.appendChild(js1);
js1.onload = function() {
   var js2 = document.createElement('script');
   js2.type = 'text/javascript';
   document.body.appendChild(js2);
   js2.src = '/js-2.js';
};
js1.src = '/js-1.js';
person Jason    schedule 30.12.2013
comment
направих промените, но все още имам същия проблем. - person hjrshng; 30.12.2013

Не трябва да добавяте кода за създаване на етикет вътре в събитието onload. Ако не греша, IE ще започне да изтегля файла веднага щом маркерът на скрипта бъде добавен към DOM.

Моето предложение е да преместите всичко, което имате в събитието onload, навън и може би да имате манипулираща функция вътре в събитието onload, за да знаете със сигурност кога файлът е приключил със зареждането. По този начин единственият ви проблем ще бъде тестването на извикването на функцията вътре в събитието onload. Можете да направите това, като се подигравате с document.createElement('script'); и върнете фалшив обект, който можете да използвате като "fakeObject.onload()" и да шпионирате, ако вашата вътрешна помощна функция е извикана.

person Adrian Neatu    schedule 01.07.2014