我正在开发一个 Angular 应用程序(Angular 1.1.5)。我需要某种方式来模拟 e2e 测试的 REST API 响应。
AngularJS (Green & Seshadri)详细介绍了使用$httpBackend
.
文档建议使用模块ngMockE2E
来模拟$httpBackend
(这与正常的单元测试$httpBackend
模拟不同。
我花了几个小时研究ngMockE2E
API,虽然我可以看到一些好处,但似乎也有很多缺点。我的问题是:
ngMockE2E
与提供测试响应的简单服务器相比,有哪些优势?或者,更一般地说,测试 Angular 应用程序与服务器交互的最佳方法是什么?
我能想到几个缺点:
- 我需要更改我的 HTML 以使用不同的 Angular 模块(取决于
ngMockE2E
我的实际应用程序模块的新模块)引导应用程序 - Firebug/Developer 工具没有要检查的 HTTP 请求。这对我来说是一件大事。我最终在我的模拟后端编写了请求/响应日志记录方法。我猜大多数模拟后端都包含这种代码。
- 没有一种简单的方法可以从 URL 中提取参数。如果我想从 中获取id参数
/resource/:id
,我需要提供一个正则表达式来匹配 URL (\/resource\/.+$
),然后在斜杠上拆分匹配的 URL 字符串并选择最后一个元素。 - API 很笨拙。返回静态对象很简单,但根据请求的 URL 动态确定要返回的测试对象却很困难。一些应用程序可能能够硬编码一组完整的测试 URL,但我需要测试大量资源,所以这对我来说是不切实际的。更复杂的代码意味着出错的地方更多。
我也能想到一些优点。使用时ngMockE2E
:
- 我不需要告诉我的应用测试 API 在哪里 -
$httpBackend
将检查所有HTTP 请求是否匹配。 - 我根本不需要运行 Web 服务器。
- 我不需要重新启动服务器来获取对我的测试数据的更改。
- 测试中的整体组件较少。但是,鉴于这是一个集成测试,这并不是一个巨大的好处。
对想法和经验非常感兴趣。