角度集成测试中可以测试的内容以及单元测试中可以测试的内容

时间:2019-07-02 20:20:25

标签: angular unit-testing jasmine integration-testing karma-jasmine

通过Angular CLI生成组件会创建一个.spec文件。是否应该在其中包括集成测试和个别测试?如何判断测试是否单独?

例如,我正在测试一种通过Output发出值,订阅EventEmmiter并在订阅期间检查值的方法,这是单元测试吗?

第二个例子。 我正在测试工具提示显示方法,它是一个引导程序组件,所以这是一个集成测试,因为您需要与另一个组件进行交互?

第三个例子, 我正在测试一种方法,该方法可以更改组件中的变量并最终重定向到路由器。导航,检查路由器是否已重定向到给定地址-这是集成测试吗?

我在文档中找不到一个答案。

2 个答案:

答案 0 :(得分:1)

标准做法是将各个单元测试与组件,指令和服务并排放置在jasmine spec文件中。默认情况下,cli将使用茉莉创建这些文件,并使用业力测试运行程序运行它们。

对于集成测试,请在e2e文件夹中创建这些测试。默认情况下,这些将再次使用茉莉花以及量角器测试运行程序。对于集成测试,建议您避免与页面对象进行很多页面交互,以保持测试的可读性和较高的抽象水平。

澄清

集成测试将测试Angular应用程序与其他层(如Rest或GraphQL后端)的集成。如果您要测试角度应用程序中组件的集成,只要它不是前端应用程序之外的任何固定装置,这就是“深度单元”。如果您正在寻找这种深层单元测试,请将它们放在规格文件中并与单元测试一起运行。

答案 1 :(得分:1)

  

通过Angular CLI生成组件会创建一个.spec文件。应该   集成和单个测试包括在那里?

请注意,规格文件实际上是optional。但是无论如何,无论您如何在应用程序中定义接缝,您通常都不想将集成测试与单元测试结合在一起。那是因为它们通常在不同的时间,不同的环境中运行,是出于不同的原因。话虽如此,它们之间的唯一区别可能是使用具体的实现方式注入了一个模拟诗句。

  

我怎么知道   测试是否单独进行。

这个问题以及其余的问题取决于您在测试纯理论上的位置以及如何将其与开发现实联系起来。例如,Roy Osherove将“单位”定义为:

  

[a] "unit of work" or a "use case" inside the system.

这意味着对于任何合理设计的非平凡应用程序都需要进行一定程度的集成。但可以肯定的是:如果您的测试依赖于数据库连接,网络可用性,API /服务,文件系统或任何其他易失性依赖项,那么它绝对是一个集成测试。