我们刚刚开始使用 AngularJS 开发一个 Web 应用程序,并且在正确测试它时遇到了一些问题,因此我们可以使用一些建议。
一般有以下几个组件需要测试:
- 网络 API
- 角度控制器
- 角度路由
- HTML 渲染和控制器与 HTML 元素的 Angular 绑定
如何以最小的努力测试所有这些并且尽可能不重叠?
对于任何以数据库为中心的应用程序,完整的集成测试(即使用实时服务器,连接到加载数据的数据库)将特别混乱,因为必须有一个过程为所有测试生成足够的数据并重置数据库和测试必须小心不要修改彼此的数据。(如果我在这里遗漏了什么,请告诉我)
鉴于上述观点,我假设最好切断服务器和客户端之间的链接,并仅使用模拟数据运行 Angular 测试。
另外,我假设如果 E2E 测试考虑到所有可能的场景,单元测试控制器是多余的,因为它们的值绑定到模型(因此将测试上面的所有 2、3 和 4)。单元测试仅对非常复杂的控制器或测试服务和指令有用。
但是,我们找不到任何关于如何$httpBackend
在每个测试的基础上模拟东西的信息,就像你在单元测试中所做的那样,使用expect*()
. Angular 文档似乎建议在必要时when*()
偶尔使用 plus 。passthrough()
但是,这带来了为所有场景创建测试数据的上述问题,并且您可能需要在每次测试之前重置内存数据库以确保测试不受影响。此外,您正在失去使用$httpBackEnd.expect*()
which 检查没有丢失或冗余调用服务器的安全性 - 这向我表明它还需要单元测试控制器来检查这一点。
有人可以为 AngularJS 应用程序提供详细的测试策略来解决上述 4 个组件的测试以及上面写的问题吗?