我正在动态创建一些这样的脚本:
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事件?
答案 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()"如果你的内部辅助函数被调用,那就是间谍。