【发布时间】:2015-06-05 14:52:33
【问题描述】:
一段时间以来,我们一直在使用protractor 进行端到端测试。
现在我们正在尝试涵盖几个极端情况,其中涉及修改来自 API 端点请求的响应 - 为此我们使用protractor-http-mock,它提供了一种易于使用的方法来用预定义的模拟替换 HTTP 响应.
但是,如果我们想测试一个突然的连接丢失发生的情况呢?在这种情况下,我们有哪些选择?
换句话说,我们希望实现一个案例,即对特定端点的请求会产生网络连接错误,并看看我们的应用程序会如何反应。
我愿意接受任何建议,我目前正在考虑以下策略:
- 看看有没有类似
protractor-http-mock的第三方nodejs库 - 模拟
$httpangularjs 服务 - 启动一个代理并在测试期间以某种方式控制它(
grunt-connect-proxy看起来相当成熟,尽管我不确定是否可以从规范动态更改代理的行为 ) - 在浏览器级别控制它 - 例如具有网络限制谷歌浏览器功能(虽然我很确定这是
selenium无法控制的东西,Network throttling with chrome and selenium)(浏览器插件/扩展?)
【问题讨论】:
-
单元测试是如此别致,以至于开发人员经常过度测试。我认为您的测试工作做得太过分了。我们当然可以通过一些方法来模拟丢失的连接,但是丢失的连接应该是一个集成测试。测试丢失连接的最佳方法是手动切断连接或停止服务器并观察结果。这不是您想要自动重复的测试,而是手动操作。当您的模拟/场景非常复杂以至于需要进行单元测试和调试时,您对单元测试的过度接触就会受到影响。
-
@DaveAlperovich 好吧,这确实是我们正在询问的端到端集成测试(不是单元测试)(使用
protractor)。不过,我接受这样的观点,即不值得付出努力。谢谢! -
看看sinon FakeXMLHttpRequest。您必须实现一个模拟服务器响应,这是一项投资,而且它是事务性的,因此在理想情况下您需要随机数量的事务或随机时间范围来进行理想测试,这在某种意义上是不足的。但是,这是我能想象到的最好的模拟连接。
-
另一个想法,你可以连接到阻塞的端口。我怀疑您更愿意创建一个健壮的服务器模拟模式。 PS,虽然我批评你的完美主义,但我也很佩服。一旦你开始思考这种开放式问题,它就会很有趣。
-
如果你要模拟一个 http 服务不工作,那么为什么要模拟它呢?只需让您的测试在无效的 uri 上运行即可。
标签: javascript angularjs testing selenium protractor