测试外部脚本是否被有效加载
AngularJS: test that an external script is effectively loaded
我正在使用一个外部脚本(来自http://segment.io),我正在编写一个AngularJS模块来与它交互。
我想知道如何有效地测试他们的脚本加载良好(除了运行真正的应用程序)。
我应该写一个end2end测试吗?
谢谢你的帮助!
// Service is a factory
service.load = function(apiKey) {
// Create an async script element for analytics.js.
var script = document.createElement('script');
script.type = 'text/javascript';
script.async = true;
script.src = ('https:' === document.location.protocol ? 'https://' : 'http://') +
'd2dq2ahtl5zl1z.cloudfront.net/analytics.js/v1/' + apiKey + '/analytics.js';
// Find the first script element on the page and insert our script next to it.
var firstScript = document.getElementsByTagName('script')[0];
firstScript.parentNode.insertBefore(script, firstScript);
};
如果文件留下一个全局变量,您可以简单地查找window。随便看看有没有上膛。
我使用的一种非常灵活的跨浏览器模式是我所说的前哨式。在执行自定义代码之前,使用包装器函数等待依赖项到达。 例如,如果我动态地将jQuery注入到页面中,并且我知道它需要用于其他动态的东西:(function waiter(){
if(!window.jQuery){ return setTimeout(waiter, 37); }
$("#myDiv").fadeOut();
}())
此模式独立于任何脚本加载器或浏览器特定事件而工作,并且不需要修改依赖文件,非常适合等待库的CDN副本。
你可以很容易地扩展这个概念,等待几个依赖使用现代数组方法:
(function waiter(){
if(![
window.jQuery, // core
window.jQuery.fn.effect, // jq ui
window.jQuery.fn.whizBang // jq ui plugin
].every(Boolean)){ return setTimeout(waiter, 37); }
$("#myDiv").whizBang();
}())
有人在AngularJS IRC频道给我指出了一个使用Jasmine waitsFor块的可行解决方案:github.com/pivotal/jasmine/wiki/Asynchronous-specs
在规范后面的规范下面:
it('should load the API when called with api key', inject(function ($window, segmentio) {
segmentio.load(apiKey);
waitsFor(function() {
return $window.analytics.initialized == true;
}, "Segmentio never loaded", 10000);
runs(function () {
expect($window.analytics).toBeDefined();
expect($window.analytics.initialized).toBeTruthy();
// Unload
$window.analytics = null;
});
}));
相关文章:
- 数组在手动写入时有效,但从文本文件加载时无效
- I'我在页面加载时将整个$_SESSION变量放入一个json对象中.虽然这对我有效,但这是一个好的做法吗
- Fine Uploader-未收到来自已加载iframe的有效消息
- 在层中加载多个图像,哪种方法更有效(资源方面)?-加载并编译PHP或将其堆叠
- jQuery加载在Dreamweaver上有效,但在浏览器中无效
- 我如何在Capybara中测试页面是否未重新加载(JavaScript onClick拦截有效)
- jQuery 帖子在加载时有效,但在点击时不起作用
- Javascript窗口/图像加载时间 - 这应该不起作用,但它确实有效
- 正确有效地实现后台加载
- 这是在网页中存储和使用从数据库加载的数据的最有效方法
- jQuery Click - 在页面 1st 加载时不起作用,但如果页面重新加载则有效
- 加载20MB +网页的最有效方法
- 是否应将此文件加载为有效的.js文件
- 砌体在移动浏览器(chrome)上不起作用,并且仅在Chrome桌面版本上有效,如果我重新加载(ctrl + f5)页面
- JQuery Mobile - 关闭对话框后加载错误的页面,并且Javascript并不总是有效
- 如何有效地加载1000 +谷歌地球标记
- Ajax 脚本仅在收到的 XML 足够大/需要足够长的时间来加载时才有效
- 有效的 Adobe Scene7 URL 生成“加载播放器时出错:找不到可播放的源”
- 测试外部脚本是否被有效加载
- 主干和RequireJS有效加载