我们刚刚开始使用AngularJS开发Web应用程序,我们在正确测试时遇到了一些问题,因此我们可以使用一些建议。
一般来说,有以下组件来测试:
- 的Web API
- 角控制器
- 角路由
- HTML渲染和角控制器的结合HTML元素
如何以最小的努力测试所有这些,如果可能的话,不会重叠?
对于任何以数据库为中心的应用程序来说,完整的集成测试(例如,连接到加载数据的数据库的活动服务器)将特别混乱,因为必须有一个过程为所有测试和重置生成足够的数据数据库和测试必须小心,不要修改彼此的数据。 (如果我在这里丢失东西请让我知道)
鉴于上述观点,我假设最好断开服务器和客户端之间的链接,并仅使用模拟数据运行Angular测试。另外,假设如果E2E测试处理所有可能的情况,单元测试控制器是多余的,因为它们的值绑定到模型(并且因此将测试上面的2,3和4中的全部)。单元测试只会对非常复杂的控制器或测试服务和指令有帮助。
但是,我们无法找到任何关于如何在每个测试基础上模拟$httpBackend
的信息,就像您在单元测试中使用expect*()
一样。 Angular docs似乎建议在必要时使用when*()
加上偶尔的passthrough()
。
但是,这提出了为所有场景创建测试数据的上述问题,您可能需要在每次测试之前重置内存数据库,以确保测试不受影响。此外,您正在失去使用$httpBackEnd.expect*()
的安全性,这会检查服务器是否存在缺少或多余的呼叫 - 这对我而言意味着它还需要单元测试控制器来检查这一点。
有人可以为AngularJS应用程序提供详细的测试策略,解决上述4个组件的测试以及上面写的问题吗?
我还在脑海里想着这些不同的想法。我认为最重要的是在真实的数据库上测试完整的应用程序。这也是最难的。使用角度场景这个看起来有点不对,因为那样你就可以将自己锁定在Angular中进行所有测试。像Selenium WebDriver这样的东西似乎更好,但它也是一个麻烦设置。如果我找到一个明确的策略,我会回到这个。 – iwein
绝对如此。对真实数据库有很多价值测试。 +1选择Angular生态系统之外的东西,尽管没有天生适合引入Selenium。您可以自由选择任何硒实现,例如Python或C#或Java。 – fatuhoku