示例应用程序

学习目标

  • 书中使用的示例 Angular 应用程序

  • 示例演示的功能

在本指南中,我们将通过查看两个示例来探索测试 Angular 应用程序的不同方面。

计数器组件

计数器是一个可重用的组件,使用按钮和输入字段来增加、减少和重置一个数字。

测试具有挑战性

对于中级的 Angular 开发者来说,这可能看起来很简单。这是有意的。本指南假设您已经了解 Angular 的基础知识,并且能够构建一个计数器组件,但在测试细节方面遇到了困难。

这个示例的目标是:

  • 简单性:快速了解组件应该做什么。

  • 涵盖核心 Angular 功能:具有状态的可重用组件,输入、输出、模板、事件处理。

  • 可扩展性:更复杂应用架构的起点。

状态管理

计数器有三种不同的状态管理解决方案:

  1. 独立的、自包含的计数器组件,它持有自己的状态。

  2. 使用依赖注入连接到服务的计数器。它与其他计数器共享状态,并通过调用服务方法来更改状态。

  3. 连接到中央 NgRx Store 的计数器(NgRx 是一个流行的状态管理库)。计数器通过分派 NgRx Action 间接更改状态。

尽管计数器看起来很容易实现,但从测试的角度来看,它已经提供了宝贵的挑战。

Flickr 图片搜索

该应用程序允许您在流行的图片托管站点 Flickr 上搜索照片。

典型的应用程序流程

首先,您输入搜索词并开始搜索。然后,查询 Flickr 搜索 API。其次,呈现搜索结果的缩略图。第三,您可以选择一个搜索结果查看照片的详细信息。

该应用程序的实现相对简单和直观。但它也提出了一些重要的问题:

  • 应用程序结构:如何将责任划分为组件并建立依赖关系。

  • API 通信:如何通过发出 HTTP 请求获取数据并更新用户界面。

  • 状态管理:如何保存状态,在组件树中传递状态以及如何修改状态。

Flickr 搜索提供了两种不同的状态管理解决方案:

状态管理
  1. 顶级组件中管理状态,并通过组件树传递状态,并使用 Outputs 进行更改。

  2. 状态由 NgRx Store 管理。组件连接到存储库以获取状态并分派 Actions。状态在 Reducer 中进行更改。Action 的副作用由 NgRx Effects 处理。

一旦您能够为这个示例应用程序编写自动化测试,您就能够测试大多数典型 Angular 应用程序的功能。