如何使用 Cypress 测试为实时数据源的 UI?

阅读时长 6 分钟读完

Cypress 是一个前端自动化测试工具,它提供了简单易用的 API,可用于编写端到端测试(E2E)和集成测试。在这篇文章中,我们将介绍如何使用 Cypress 测试为实时数据源的 UI。

为什么需要测试实时数据源的 UI?

在现代 web 应用中,很少有应用是不依赖于实时数据源的。例如,当我们使用在线购物平台时,平台显示的产品价格和库存量随时更新。因此,在测试 UI 时,需要确保对实时数据源的正确性和稳定性进行测试,以防止用户在应用中遇到错误或不一致的数据。

当应用启动后,实时数据源的更新通常是由后端服务或外部服务驱动的,而前端 UI 只是从这些服务中获取数据并呈现给用户。这意味着在测试 UI 时,我们需要模拟或拦截与实时数据源的通信,并检查 UI 的正确性。

Cypress 的基础知识

在开始测试前,我们需要对 Cypress 的一些基础知识有清晰的理解。以下是几个基本概念:

测试文件

Cypress 测试文件以 .spec.js.spec.ts 结尾。例如,如果您想编写名为 example.ts 的测试文件,则应该将它命名为 example.spec.ts

测试套件和测试用例

测试文件可以包括一个或多个测试套件(describe 块),每个测试套件包括一个或多个测试用例(it 块)。测试套件和测试用例通常是根据功能和场景来组织的。例如,一个测试套件可以包含所有购物车相关的测试用例。

页面对象模式

在测试 UI 时,我们经常需要访问页面元素(例如按钮、文本框和下拉菜单)。将页面对象封装为单独的对象是一种常用的最佳实践。这种方式被称为“页面对象模式”。

断言

在 Cypress 中,断言用于检查预期结果是否与实际结果相一致。Cypress 提供了丰富的断言库,包括 expectshould。例如,以下代码断言页面的标题是否为“Welcome to Cypress!”:

如何测试实时数据源的 UI

我们将使用以下示例应用程序作为约束条件。该应用程序有一个借书服务,用户可以从中借阅书籍,该服务的 API 由第三方供应商提供。为了测试我们的应用程序,我们需要模拟 API 调用,并测试 UI 的正确性。

步骤 1:创建页面对象

我们将首先创建一个页面对象,该对象管理应用程序页面上的所有元素。在这种情况下,我们将创建 BookServicePage 页面对象,如下所示:

-- -------------------- ---- -------
-- --------------------
------ ----- --------------- -
  ------ -
    -------------
  -
  --- ------- -
    ------ ----------------
  -
  --- ------- -
    ------ ----------------
  -
  ----------------- ------- -
    ------ ----------------------------------
  -
-

这个页面对象具有三个方法:open()borrowBook(title: string) 和两个属性 titlebooksopen() 方法将打开书籍服务页面,title 属性将返回页面的标题,books 属性将返回书籍列表的元素。borrowBook(title: string) 将以指定的书籍标题借阅书籍。

步骤 2:编写测试套件和用例

现在我们将编写一个测试套件,它包括两个测试用例:一个测试用例用于检查书籍列表是否显示正确;另一个用例测试用户是否可以成功借阅一本书。在这种情况下,由于应用程序的 API 是由第三方供应商提供的,我们将使用 Cypress 的 cy.intercept() 命令模拟 API 调用。

-- -------------------- ---- -------
-- --------------------
-------------- --------- -- -- -
  ----- --------------- - --- -----------------

  ------------- -- -
    --------------------------------------------- - -------- ------------ -----------------
    ----------------------
    --------------------
  --

  ------------ ------- -- -- -
    ----- ------ - ------ ---- --- ------ ------ --- ----------- --- ---- - -------------
    ------------------------------------------
    ------------------------------------------
    ---------------------- -- -
      ----------------------------------------------------------
    --
  --

  ----------- - ------ -- -- -
    ----- ----- - ----- ---- --- -----
    ---------------------------------
    ---------------------------------------------------------
  --
--

beforeEach() 块首先通过调用 cy.intercept() 命令来模拟从 API 获取数据的请求。as('getBooks') 用于为拦截器指定名称,这是为了在后面的测试中等待我们的拦截器。

it('Displays books', ...) 使用 Cypress 的断言库,检查页面是否正确地显示了书籍列表。

it('Borrows a book', ...) 中,我们模拟用户在页面上选择 Gone with the Wind 这本书并借阅它。然后,我们检查页面上是否不再显示这本书。

步骤 3:运行测试

现在我们运行 Cypress 并查看测试结果。在终端中使输入以下命令启动 Cypress:

选择 book-service.spec.ts,并单击运行按钮。在测试运行结束后,我们可以查看测试结果,并检查测试是否能够通过。

结论

在这篇文章中,我们介绍了如何使用 Cypress 测试为实时数据源的 UI。我们学习了如何编写页面对象、测试用例和测试套件以及如何模拟 API 调用。通过编写端到端测试,我们可以验证用户界面是否正确地反映了实时数据源的状态,从而确保 web 应用程序的稳定性和可维护性。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6773cd9c6d66e0f9aae7cf80

纠错
反馈