【问题标题】:Angular what can be tested in the integration test and what in the unit testAngular 可以在集成测试中测试什么以及在单元测试中测试什么
【发布时间】:2019-07-03 16:06:25
【问题描述】:

通过 Angular CLI 生成组件会创建一个 .spec 文件。那里应该包括集成和单独的测试吗?我如何判断一个测试是否是单独的。

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

第二个例子。 我在测试tooltip显示方法,它是一个引导组件,所以这是一个集成测试,因为你需要与另一个组件交互?

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

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

【问题讨论】:

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


    【解决方案1】:

    通过 Angular CLI 生成组件会创建一个 .spec 文件。应该 是否包含集成和单独测试?

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

    如何判断 测试是否是个人的。

    这个问题以及您的其他问题取决于您在测试纯粹主义者范围内的位置以及您如何将其与您的开发现实联系起来。例如,Roy Osherove 将“单位”定义为:

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

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

    【讨论】:

      【解决方案2】:

      标准做法是将您的单个单元测试与您的组件、指令、服务并排放置在 jasmine 规范文件中。默认情况下,cli 将使用 jasmine 创建这些,它们将使用 karma 测试运行器运行。

      对于集成测试,请在 e2e 文件夹中创建它们。默认情况下,这些将再次使用 jasmine,以及 Protractor 测试运行器。对于集成测试,建议您抽象出大部分页面与页面对象的交互,以保持测试的可读性和高抽象级别。

      澄清

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

      【讨论】:

      • 我知道使用量角器的e2e测试放在e2e目录下。但是集成测试呢,它们不是 e2e 测试,即我在示例中介绍的那些。你能理解这个吗?
      • 如果你在模拟其中一个组件,那就是浅层集成测试。如果您同时使用这两个组件,则称为深度集成测试。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-29
      • 2010-11-21
      • 2010-10-05
      相关资源
      最近更新 更多