javascript - Angular E2E 测试数据 : ngMockE2E or test data server?

标签 javascript angularjs angularjs-e2e

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

AngularJS (Green & Seshadri)详细介绍了使用 $httpBackend 对 HTTP 请求进行单元测试,但对端到端测试几乎没有提及。

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

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

与提供测试响应的简单服务器相比,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/

相关文章:

javascript - 路由在 Angularjs 上不起作用

angularjs - 使用 Protractor 测试上传文件失败

javascript - 在页面导航时发送登录凭据

javascript - onmouseout 没有触发,但 onmouseover 是

javascript - Javascript/MongoDB 中的 For 循环条件

javascript - AngularJs:更新事件的 $scope

javascript - 使用 javascript 创建多个元素

javascript - jQuery 代码不适用于 Firefox

javascript - Protractor - 在哪里使用 browser.waitForAngular()

javascript - Karma E2E 测试已找到,但已跳过并标记为失败