茉莉花间谍元素onload

时间:2013-12-30 10:48:18

标签: jasmine jasmine-jquery

我正在动态创建一些这样的脚本:

  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事件?

2 个答案:

答案 0 :(得分:0)

我认为问题可能出在您的订购中。您应该创建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';

答案 1 :(得分:0)

您不应该在onload事件中添加标记创建代码。如果我没有错,IE只会在脚本标记添加到DOM后立即开始下载文件。

我的建议是将onload事件中的所有内容移到外部,并且可能在onload事件中有一个处理函数,以确定文件何时完成加载。 这样你唯一的问题就是在onload事件中测试函数的调用。你可以通过模拟document.createElement(' script')来做到这一点;并返回一个你可以使用的虚假对象,例如" fakeObject.onload()"如果你的内部辅助函数被调用,那就是间谍。