Angularjs 角度单元测试与集成测试

Angularjs 角度单元测试与集成测试,angularjs,unit-testing,testing,Angularjs,Unit Testing,Testing,我最近开始为我正在开发的angular应用程序编写单元测试。 有一件事我不确定,那就是单元测试和集成测试之间的区别 假设我有一个依赖于另一个(非角度的)服务的控制器要测试,我应该创建一个服务的模拟还是在可能的情况下尝试使用真正的服务 如果我注入服务本身,这不意味着我要创建集成测试而不是单元测试吗 我之所以问这个问题,是因为我的同事们一直在编写注入真正服务的测试,并且仍然称之为单元测试。它耗费了大量时间,尤其是当您必须在测试中调试注入服务的错误,并且每个服务依赖于其他5个服务时……单元测试的目的是

我最近开始为我正在开发的angular应用程序编写单元测试。 有一件事我不确定,那就是单元测试和集成测试之间的区别

假设我有一个依赖于另一个(非角度的)服务的控制器要测试,我应该创建一个服务的模拟还是在可能的情况下尝试使用真正的服务

如果我注入服务本身,这不意味着我要创建集成测试而不是单元测试吗


我之所以问这个问题,是因为我的同事们一直在编写注入真正服务的测试,并且仍然称之为单元测试。它耗费了大量时间,尤其是当您必须在测试中调试注入服务的错误,并且每个服务依赖于其他5个服务时……

单元测试的目的是在与环境和其他单元隔离的情况下验证底层单元的行为。本质上,如果您的被测系统或测试本身与外部系统交互,则这不是真正的单元测试


几个月前,我写了一篇关于这个话题的文章。查看它以了解更多信息。

根据我的经验,angular的测试(jasmine/mocha)涉及注入“真实”服务,但您的单元测试将使用所需的任何交互“存根”它们的行为。您可以使用
$provide
将这些依赖项作为一个整体来模拟,但通常当您需要一个服务的多个方面时,注入真实的东西并使用“存根”来定义测试的行为就更容易了。单元测试最大的敌人是服务内部的“状态”,您需要尽可能少地维护服务内部的状态。谢谢。你的回答真的很有帮助,它证实了我的想法。还有,这篇文章很酷也很有趣。