Angular E2E测试数据:ngMockE2E还是测试数据服务器?

时间:2013-10-29 13:48:52

标签: javascript angularjs angularjs-e2e

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

AngularJS (Green & Seshadri)详细介绍了使用$httpBackend测试HTTP请求的单元,但对e2e测试几乎没有说明。

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

我花了几个小时调查ngMockE2E API,虽然我可以看到一些好处,但似乎有许多缺点。我的问题是:

ngMockE2E相对于提供测试响应的简单服务器有什么优势?,或者更一般地说,测试Angular应用与a的交互的最佳方式是什么?服务器吗

我可以想到一些缺点:

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

我也可以想到一些优点。使用ngMockE2E时:

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

对思想和经历非常感兴趣。

1 个答案:

答案 0 :(得分:1)

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