Шпионский элемент 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?


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