2

我正在开发一个 Angular 应用程序(Angular 1.1.5)。我需要某种方式来模拟 e2e 测试的 REST API 响应。

AngularJS (Green & Seshadri)详细介绍了使用$httpBackend.

文档建议使用模块ngMockE2E模拟$httpBackend(这与正常的单元测试$httpBackend模拟不同。

我花了几个小时研究ngMockE2EAPI,虽然我可以看到一些好处,但似乎也有很多缺点。我的问题是:

ngMockE2E与提供测试响应的简单服务器相比,有哪些优势?或者,更一般地说,测试 Angular 应用程序与服务器交互的最佳方法是什么?

我能想到几个缺点:

  • 我需要更改我的 HTML 以使用不同的 Angular 模块(取决于ngMockE2E我的实际应用程序模块的新模块)引导应用程序
  • Firebug/Developer 工具没有要检查的 HTTP 请求。这对我来说是一件大事。我最终在我的模拟后端编写了请求/响应日志记录方法。我猜大多数模拟后端都包含这种代码。
  • 没有一种简单的方法可以从 URL 中提取参数。如果我想从 中获取id参数/resource/:id,我需要提供一个正则表达式来匹配 URL ( \/resource\/.+$),然后在斜杠上拆分匹配的 URL 字符串并选择最后一个元素。
  • API 很笨拙。返回静态对象很简单,但根据请求的 URL 动态确定要返回的测试对象却很困难。一些应用程序可能能够硬编码一组完整的测试 URL,但我需要测试大量资源,所以这对我来说是不切实际的。更复杂的代码意味着出错的地方更多。

我也能想到一些优点。使用时ngMockE2E

  • 我不需要告诉我的应用测试 API 在哪里 -$httpBackend将检查所有HTTP 请求是否匹配。
  • 我根本不需要运行 Web 服务器。
  • 我不需要重新启动服务器来获取对我的测试数据的更改。
  • 测试中的整体组件较少。但是,鉴于这是一个集成测试,这并不是一个巨大的好处。

对想法和经验非常感兴趣。

4

1 回答 1

1

我的结论是,几周后的开发:我发现一个简单的虚拟后端(Node/Express)比 e2e 测试模拟后端更灵活和可维护。最令人信服的原因是正确的 URL 模式匹配和用于浏览器调试的真实 HTTP 请求。

于 2013-11-19T21:41:47.380 回答