3

我们在移动页面上有大约 3-5 个 XHR 请求 - 有时其中一部分无法正常工作,仅在真实设备上,仅在慢速连接时。我想提高我们移动 Web 应用程序的可持续性。

所以我的问题是..如何模拟边缘连接,随机中断?

在像 MobiOne 这样的模拟器中 - 连接速度限制有效,但连接具有桌面稳定性 - 所以一切都运行缓慢。

4

2 回答 2

4

您可以使用Charles。这允许您模拟较慢的互联网连接,并且是跨平台的?

于 2012-10-26T16:21:31.840 回答
2

为什么不写单元测试?您可以为您的 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 都不正确,那基本上应该模拟没有互联网连接。

于 2012-10-27T00:03:54.053 回答