我们在移动页面上有大约 3-5 个 XHR 请求 - 有时其中一部分无法正常工作,仅在真实设备上,仅在慢速连接时。我想提高我们移动 Web 应用程序的可持续性。
所以我的问题是..如何模拟边缘连接,随机中断?
在像 MobiOne 这样的模拟器中 - 连接速度限制有效,但连接具有桌面稳定性 - 所以一切都运行缓慢。
我们在移动页面上有大约 3-5 个 XHR 请求 - 有时其中一部分无法正常工作,仅在真实设备上,仅在慢速连接时。我想提高我们移动 Web 应用程序的可持续性。
所以我的问题是..如何模拟边缘连接,随机中断?
在像 MobiOne 这样的模拟器中 - 连接速度限制有效,但连接具有桌面稳定性 - 所以一切都运行缓慢。
您可以使用Charles。这允许您模拟较慢的互联网连接,并且是跨平台的?
为什么不写单元测试?您可以为您的 xhr 函数创建一个模拟/间谍。这样做,您可以强制破坏各种基于 ajax 的组件。这会迫使您始终通过重新尝试等操作来解决连接断开的问题,并确保在失败时出现加载屏幕和消息。
我认为通过采取这些步骤,您正在创建一个更简单的应用程序。一个糟糕的连接模拟器只会向你证明事情是不可预测的。如果您要修复一件事,那么下次您运行模拟器时,它只会无限地发现其他错误。
这是一个使用 jasmine/jquery 的示例:
it("Will allow failed ajax events", function() {
var dfd = $.Deferred();
spyOn($, "ajax").andReturn(dfd);
dfd.reject(); // calls all failed events
});
it("Will allow done ajax events", function() {
var dfd = $.Deferred();
spyOn($, "ajax").andReturn(dfd);
dfd.resolve(); // calls all done events
});
您的来源可能如下所示:
$.get("url").then(function() {
//done
}, function () {
//fail
});
或者
$.ajax("url")
.done(function() {})
.fail(function() {});
或者
var dfd = $.post("url");
$.when(dfd).done(fn).fail(fn);
这可以测试单个 ajax 事件。您还可以尝试潜在地概括一些默认行为。
如果您不使用 jquery,您仍然可以使用延迟。还有其他延迟库,或者您可以从 jquery 源中获取 dfd,这应该有助于解决所有这些问题。如果您正在使用其他 XHR 或自制的东西,您应该能够通过始终返回 dfds 并在正常回调时解决或失败它们来集成 2。
最后,要实际测试您的应用程序的功能,只需将正常的 url 暂时替换为不起作用的东西。并观察您的应用程序如何反应。如果您所有的 URL 都不正确,那基本上应该模拟没有互联网连接。