我正在开发一个 Angular 应用程序 (Angular 1.1.5)。我需要一些方法来模拟端到端测试的 REST API 响应。
AngularJS (Green & Seshadri)详细介绍了使用 $httpBackend
对 HTTP 请求进行单元测试,但对端到端测试几乎没有提及。
文档建议使用 the ngMockE2E
module模拟 $httpBackend
(这与正常的单元测试 $httpBackend
模拟不同。
我花了几个小时研究 ngMockE2E
API,虽然我看到了一些好处,但似乎也有很多缺点。我的问题是:
与提供测试响应的简单服务器相比,ngMockE2E
有哪些优势?,或者更一般地说,测试 Angular 应用的最佳方式是什么与服务器交互?
我能想到一些缺点:
- 我需要更改我的 HTML 以使用不同的 Angular 模块(一个依赖于
ngMockE2E
和我的实际应用程序模块的新模块)引导应用程序 - 没有要检查的 Firebug/Developer 工具的 HTTP 请求。这对我来说很重要。我最终在我的模拟后端中编写了请求/响应日志记录方法。我想大多数模拟后端都包含这种代码。
- 没有一种简单的方法可以从 URL 中提取参数。如果我想从
/resource/:id
获取 id 参数,我需要提供一个正则表达式来匹配 URL (\/resource\/.+$
),然后在斜杠上拆分匹配的 URL 字符串并选择最后一个元素。 - API 很笨拙。返回一个静态对象很简单,但是很难根据请求的 URL 动态确定返回哪个测试对象。有些应用程序可能能够硬编码一组完整的测试 URL,但我需要测试大量资源,所以这对我来说是不切实际的。更复杂的代码意味着更容易出错。
我也能想到一些优点。使用 ngMockE2E
时:
- 我不需要告诉我的应用程序测试 API 在哪里 -
$httpBackend
将检查所有 HTTP 请求是否匹配。 - 我根本不需要运行网络服务器。
- 我不需要重新启动服务器来获取对我的测试数据的更改。
- 测试中的整体组件较少。但是,鉴于这是一个集成测试,这并不是一个巨大的好处。
对思想和经验非常感兴趣。
最佳答案
经过几周的开发,我的结论是:我发现一个简单的虚拟后端 (Node/Express) 比 e2e 测试模拟后端更灵活且更易于维护。最令人信服的原因是正确的 URL 模式匹配和用于浏览器调试的真实 HTTP 请求。
关于javascript - Angular E2E 测试数据 : ngMockE2E or test data server?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19660033/