Angularjs 我的单元测试应该受到多大的限制(从角度来看)?

Angularjs 我的单元测试应该受到多大的限制(从角度来看)?,angularjs,unit-testing,Angularjs,Unit Testing,我目前正在为调用服务函数的Angular Controller编写单元测试。我使用jasmine spies来确保对服务的调用传入正确的参数。一切似乎都很好;这或多或少只是测试控制器的配置。我还测试了返回值:返回的对象包含某些属性,它们是有效的。同样,尽管单元测试现在已经进入集成测试领域,但我的信心仍然很高。我确信这一功能中没有bug 我们重构了服务。它的函数定义和返回的对象都已更改。整个应用程序的测试都被破坏了。对我来说,这似乎没什么。我应该有很多失败的测试。我的应用程序中的中心点不再有效。然

我目前正在为调用服务函数的Angular Controller编写单元测试。我使用jasmine spies来确保对服务的调用传入正确的参数。一切似乎都很好;这或多或少只是测试控制器的配置。我还测试了返回值:返回的对象包含某些属性,它们是有效的。同样,尽管单元测试现在已经进入集成测试领域,但我的信心仍然很高。我确信这一功能中没有bug

我们重构了服务。它的函数定义和返回的对象都已更改。整个应用程序的测试都被破坏了。对我来说,这似乎没什么。我应该有很多失败的测试。我的应用程序中的中心点不再有效。然而,我还认为,更改端点不应该是一个大麻烦


所以我的问题是:我应该如何测试对服务的调用?我检查电话和回复是否做得太多了?在我看来,响应是我应该关心的全部(因为参数也在进行隐式测试)。尽管如此,对于抽象层的简单更改,许多测试似乎都失败了。

我不同意。如果您单独测试一个控制器,那么应该模拟该服务,并且关于服务交互,您应该测试的唯一一件事是将正确的参数传递给该服务。答案应该是存根的。如果你测试实际服务代码的实际响应,你就不再是对控制器进行单元测试了。我同意我不再是对控制器进行单元测试了,但我可以重构服务的所有失败的单元测试,现在我的控制器中会有模拟/存根,无法准确描述真实世界。即使控制器本身不再工作,控制器的测试也将全部通过。如果不运行我的e2e套件,我将不再有信心,因为这需要花费更长的时间。好吧,你也应该重构你存根服务的所有地方。但是你怎么知道所有重构需要发生在哪里呢?你不会到处都有失败的单元测试。您是否只需要严格检查每个文件,并确保mock已更新(如果存在)?我知道这是一个API变更,而不仅仅是重构实现细节,所以这可能是必要的。但是,对我来说,这里似乎有一种气味。这是JavaScript等动态语言的一个巨大问题:重构是一种痛苦。您可以使用TypeScript来减少问题。否则,除非你有一个非常好的IDE,即使在JS中也能神奇地重构东西,否则你仍然可以在所有的单元测试中搜索服务的名称。我不同意。如果您单独测试一个控制器,那么应该模拟该服务,并且关于服务交互,您应该测试的唯一一件事是将正确的参数传递给该服务。答案应该是存根的。如果你测试实际服务代码的实际响应,你就不再是对控制器进行单元测试了。我同意我不再是对控制器进行单元测试了,但我可以重构服务的所有失败的单元测试,现在我的控制器中会有模拟/存根,无法准确描述真实世界。即使控制器本身不再工作,控制器的测试也将全部通过。如果不运行我的e2e套件,我将不再有信心,因为这需要花费更长的时间。好吧,你也应该重构你存根服务的所有地方。但是你怎么知道所有重构需要发生在哪里呢?你不会到处都有失败的单元测试。您是否只需要严格检查每个文件,并确保mock已更新(如果存在)?我知道这是一个API变更,而不仅仅是重构实现细节,所以这可能是必要的。但是,对我来说,这里似乎有一种气味。这是JavaScript等动态语言的一个巨大问题:重构是一种痛苦。您可以使用TypeScript来减少问题。否则,除非您有一个非常好的IDE,即使在JS中也能神奇地重构东西,否则您仍然可以在所有单元测试中搜索服务的名称。