E2E测试,单位测试和使用$ HTTPBACKEND嘲笑数据之间的混淆



我们刚刚开始开发带有AngularJS的Web应用程序,并且在正确测试它方面存在一些问题,以便我们可以使用一些建议。

通常,要测试以下组件:

  1. Web API
  2. 角控制器
  3. 角路由
  4. HTML渲染和控制器与HTML元素的角度结合

一个人如何以最小的努力测试所有这些,如果可能的话,没有重叠?

对于任何以数据库为中心的应用程序,完整的集成测试(即使用Live服务器,连接到带有数据的数据库)的完整集成测试将特别凌乱,因为必须有一个过程为所有测试生成足够的数据并重置所有测试并重置该过程DB和测试必须小心不要修改彼此的数据。(如果我在这里错过了什么,请告诉我)

给定上点,我假设最好切断服务器和客户端之间的链接并仅使用模拟数据运行角度测试。

另外,我假设如果E2E测试照顾所有可能的方案,则单位测试控制器是多余的,因为它们的值与模型绑定(因此将在上面测试所有2、3和4中的所有)。单元测试仅对非常复杂的控制器或测试服务和指令有所帮助。

但是,我们找不到有关如何使用expect*()在单位测试中进行的,每个如何使用$httpBackend模拟物品的信息。Angular Docs似乎建议在必要时使用when*()加上偶尔的passthrough()

但是,这构成了上述问题的问题,即为所有方案创建测试数据,并且您可能需要在每个测试之前重置内存中的DB,以确保测试不会受到影响。另外,您正在失去使用$httpBackEnd.expect*()的安全性,该安全性检查服务器没有丢失或多余的呼叫 - 这向我表明,这也需要单位测试控制器来检查此。

有人可以为AngularJS应用提供详细的测试策略,以解决上述4个组件的测试以及上述问题?

  1. 不确定 - 由于您的Angular应用理论上是与后端分离的,因此没有特殊原因需要进行角度测试和后端测试。我将分别测试它们,每个测试套件假设另一个组件正常工作。(因此,在测试Angular时,您假设服务器将按预期工作。)

  2. 单元测试 - 它们比E2E测试提供了更多的深度。验证代码将面对的特定条件更容易。在必要时嘲笑所有依赖项,并仅测试单元测试感兴趣的组件也很容易。单位测试不关心UI的工作方式,或者正确的数据正确绑定正确,而是不关心业务逻辑该应用的正确。

  3. (和4)E2E测试 - 较少的粒度,重点是确保从最终用户的角度看待UI的外观。对实时数据库进行测试是凌乱的(尽管有些人享受完整的端到端集成测试提供的安全性),因此您应该使用$ httpbackend来模拟服务器。

请参阅此https://www.sitepoint.com/unit-and-e2e-testing-in-angularjs/。如果您的服务/工厂使用HTTP服务来调用远程API,则可以从中返回虚假数据进行单元测试。如果您启动了一个新的Angular项目,请考虑使用量角器进行E2E测试。

最新更新