我们在移动页面上有大约3-5个XHR请求-有时它们中的一部分无法工作,只有在真正的设备上,只有在缓慢的连接上。我想提高我们的移动web应用程序的可持续性。
所以我的问题是..如何模拟边连接,即随机中断?
在像MobiOne这样的模拟器中-连接速度限制工作,但连接有桌面稳定性-所以一切都很慢。
发布于 2012-10-27 08:03:54
为什么不写一个单元测试呢?您可以为xhr函数创建一个mock/spy。通过这样做,您可以对各种基于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,你仍然可以使用deferreds。还有其他的延迟库,或者你可以直接从jquery源码中获取dfd,这应该对所有这些都有帮助。如果您正在使用其他XHR或自制的东西,您应该能够通过总是返回dfds并在正常的回调中解决或失败它们来集成这2个。
最后,要实际测试应用程序的功能,只需将常规urls临时替换为不起作用的urls即可。并观察你的应用程序的反应。如果你所有的网址都是不正确的,那基本上应该模拟没有互联网连接。
发布于 2012-10-27 00:21:32
您可以使用Charles。这可以让你模拟较慢的互联网连接,并且是跨平台的吗?
https://stackoverflow.com/questions/13046639
复制相似问题