”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么应该开始在前端测试您的应用程序?

为什么应该开始在前端测试您的应用程序?

发布于2024-08-26
浏览:893

但这些测试是为了什么?

想象一下,您正在制作巧克力蛋糕,只有在准备好后您才意识到忘记在面团中添加糖,现在怎么办?!将您的应用程序想象成这个蛋糕面糊,未经测试,它甚至可能一开始工作得很好,但在尝试的某个时刻,结果可能不会达到预期的效果。谁保证不会发生这种麻烦?!

Por que você deveria começar a testar sua aplicação no Front-End?

基于这个示例,测试证明了您的代码量,它们确保一切都在正确的位置,即使您决定添加新层或功能覆盖范围。

一般来说,自动化测试基本上是为测试其他代码而构建的代码,以确保应用程序的质量。
由于质量是关键词,因此工程和产品团队中的每个人都必须意识到测试产生的重要性和价值,以便它们能够以自然的方式集成到交付中。

我为什么要测试?

我在这里提出一些理由来说服您立即开始在代码中实施测试:

故障安全代码:测试有助于确保您的代码即使在添加新功能或进行更改后也能正常运行而不会出现错误。

无需恐惧的更改:应用程序维护将更加安全,因为您将能够重构或更新代码,而不必担心破坏某些内容,因为如果出现问题,测试会警告您。

更快的修复:通过自动化测试,您将能够更轻松地纠正问题,节省更多时间

部署过程中减少意外:您能想象刚刚完成部署并已经收到用户的电话,其中出现了可以预测的错误吗?!这些测试可以准确地帮助预防

帮助您和您的 QA 同事: 您是否知道您何时完成该功能并将其传递给 QA 进行测试,然后他给您一份包含 357 个需要修复的问题的报告?这个问题也会减少,因为你已经预测到了他可能会遇到的大部分错误

测试有哪些类型?

前端需要开发的测试有很多种类型,但今天我将重点关注其中三种:用户界面测试(UI)、功能测试(端到端)和验证测试举例说明其中每一个,我将使用测试库为 React.js 应用程序中的简单登录屏幕创建测试。

用户界面 (UI) 测试

用户界面 (UI) 测试检查组件是否按预期呈现,并且除了基于呈现之外,它们还检查重要元素的存在,例如表单字段、按钮和标签。

it('should render login form', () => {
  render();
  expect(screen.getByLabelText(/email/i)).toBeInTheDocument();
  expect(screen.getByLabelText(/senha/i)).toBeInTheDocument();
  expect(screen.getByRole('button', { name: /login/i })).toBeInTheDocument();
});

测试内容: 此测试确保 LoginForm 组件呈现基本的界面元素:电子邮件和密码字段以及登录按钮。 screen.getByLabelText 按关联标签搜索元素, screen.getByRole 按按钮的文本和功能搜索按钮。

功能测试(端到端)

功能测试或端到端(E2E)测试,从用户的角度验证应用程序的整个功能,模拟与界面的真实交互,例如填写表单和单击按钮,并评估是否应用程序按预期响应交互。

it('should call onLogin with the username and password when submitted', async () => {
  const handleLogin = jest.fn();
  render();

  fireEvent.change(screen.getByLabelText(/email/i), {
    target: { value: '[email protected]' },
  });
  fireEvent.change(screen.getByLabelText(/senha/i), {
    target: { value: '123456' },
  });

  await fireEvent.click(screen.getByRole('button', { name: /login/i }));

  await waitFor(() => {
    expect(handleLogin).toHaveBeenCalledWith({
      email: '[email protected]',
      password: '123456'
    })
  })

  await waitFor(() => {
    expect(handleLogin).toHaveBeenCalledTimes(1)
  })

});

正在测试什么: 这里,通过填写电子邮件和密码字段,然后单击登录按钮来模拟用户与登录表单的交互。该测试还检查 onLogin 函数是否使用正确的数据调用,并且仅被调用一次。

验证测试

验证测试确保应用程序验证无效输入并显示适当的错误消息。这些测试对于验证表单是否有效处理不正确的数据并向用户提供足够的反馈非常重要。

test('should show error messages for invalid inputs', async () => {
  render();

  fireEvent.change(screen.getByLabelText(/email/i), {
    target: { value: 'invalid-email' },
  });
  fireEvent.change(screen.getByLabelText(/senha/i), {
    target: { value: '123' },
  });

  await fireEvent.click(screen.getByRole('button', { name: /login/i }));

  expect(await screen.findByText(/Email inválido/i)).toBeInTheDocument();
  expect(await screen.findByText(/A senha deve ter pelo menos 6 caracteres/i)).toBeInTheDocument();
});

正在测试什么: 这里我们检查当电子邮件和密码字段填写无效数据时表单是否显示适当的错误消息。我们通过检查是否显示预期的错误消息来模拟输入不正确的值。

你明白为什么要测试吗?

在一个用户体验和软件质量优先的世界中,前端测试在确保我们的应用程序不仅正常运行,而且提供流畅、无错误的体验方面发挥着关键作用。

通过将这些测试集成到您的开发流程中,您不仅可以在问题变得令人头疼之前预防问题,还可以构建更可靠、更有弹性的代码库。每种类型的测试都有不同的验证层,它们一起形成一个大的安全层,有助于确保应用程序的质量和功能。

请记住,就像蛋糕配方中的每种成分都有其至关重要的作用一样,每种类型的测试在开发过程中都有其特定的功能,开发平衡的测试组合超出了推荐的做法,对于任何人来说都是必要的致力于提供高质量软件的团队。

Por que você deveria começar a testar sua aplicação no Front-End?

因此,下次您开发新功能或修复错误时,请将测试视为您不可或缺的盟友。它们是为用户提供更强大、更可靠、最重要的是更令人满意的应用程序的关键。

版本声明 本文转载于:https://dev.to/larissatardivo/por-que-voce-deveria-comecar-a-testar-sua-aplicacao-no-front-end-2aie?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何使用 Python 字符串匹配验证 IP 地址输入?
    如何使用 Python 字符串匹配验证 IP 地址输入?
    使用 Python 验证 IP 地址输入验证用户输入的 IP 地址在各种应用中至关重要。本文将探讨验证以字符串形式提供的 IP 地址合法性的最有效方法。首选方法偏离解析,而是利用 Python 标准库的套接字模块。通过利用 inet_aton(),我们可以确定输入字符串是否代表有效的 IP 地址:i...
    编程 发布于2024-11-07
  • 那么 Pull 请求如何再次发挥作用呢?屏显#3
    那么 Pull 请求如何再次发挥作用呢?屏显#3
    在我之前的文章中,我谈到了启动一个基于开源 GenAI 的终端应用程序。本周的任务是为另一个用户的项目贡献一个新功能。由于我们必须与新人合作,所以我与 Lily 合作,她开发了一款应用程序,其代码改进功能与我的类似,只是她的角色是老鼠! 有时间的话可以去看看她的项目老鼠助手。 她的代码是用 Type...
    编程 发布于2024-11-07
  • 为什么 Go 中不能直接将 []string 转换为 []interface{}?
    为什么 Go 中不能直接将 []string 转换为 []interface{}?
    为什么将 []string 转换为 []interface{} 会在 Go 中引发编译错误转换字符串切片 ([]string)考虑到它们共享切片特征以及 []string 的每个元素都可以被视为一个接口,Go 中的接口切片 ([]interface{}) 似乎很简单。然而,尝试这种转换时会出现编译错...
    编程 发布于2024-11-07
  • 理解 Shadow DOM:封装 Web 组件的关键
    理解 Shadow DOM:封装 Web 组件的关键
    在现代 Web 开发中,创建可重用和可维护的组件至关重要。 Shadow DOM 是 Web 组件标准的一部分,在实现这一目标方面发挥着至关重要的作用。本文深入探讨了 Shadow DOM 的概念、它的优点以及如何在您的项目中有效地使用它。 什么是 Shadow DOM? Shado...
    编程 发布于2024-11-07
  • 如何使用 Java 运行时解决输出重定向问题?
    如何使用 Java 运行时解决输出重定向问题?
    使用 Runtime 的 exec() 方法解决输出重定向问题在 Java 中,利用 Runtime.getRuntime().exec() 运行命令可以捕获进程的输出和错误流。但是,在需要输出重定向的情况下,单独使用此方法可能无效。问题:输出未重定向当使用 Runtime.getRuntime()...
    编程 发布于2024-11-07
  • 如何使用 CSS 悬停效果从左到右填充背景颜色?
    如何使用 CSS 悬停效果从左到右填充背景颜色?
    使用 CSS 从左到右填充背景颜色在 CSS 中,您可以通过利用线性渐变和动画背景定位来创建迷人的悬停效果。这种方法使您能够在悬停时从左到右用新颜色填充元素的背景。线性渐变和背景大小关键是使用由两种颜色组成的线性渐变背景,并将背景大小设置为元素宽度的两倍。这允许您在两种颜色之间创建无缝过渡。背景定位...
    编程 发布于2024-11-07
  • GraalVM 本机映像中的内存管理
    GraalVM 本机映像中的内存管理
    内存管理是计算机软件开发的重要组成部分,负责应用程序中内存的有效分配、利用和释放。其重要性在于增强软件性能,保证系统稳定性。 垃圾收集 垃圾收集 (GC) 在 Java 和 Go 等当代编程语言中至关重要。它自动检测并回收未使用的内存,从而减轻开发人员手动管理内存的需要。 GC 的概...
    编程 发布于2024-11-07
  • ## 在 C++ 中什么时候应该使用引用作为函数参数?
    ## 在 C++ 中什么时候应该使用引用作为函数参数?
    在 C 中传递参数:理解引用在 C 中,函数参数的行为由其类型决定。一个重要的区别是“按值传递”和“按引用传递”。为什么在函数参数中使用引用?引用在函数参数中用于两种情况主要原因:修改参数: 引用允许函数修改传递的参数的值。这意味着该函数可以进行调用者可见的更改。避免对象复制: 通过引用传递大对象可...
    编程 发布于2024-11-07
  • 如何在单个命令行中运行多行命令?
    如何在单个命令行中运行多行命令?
    如何在一行命令行中执行多行语句使用Python的-c选项执行单行循环时,在循环之前导入模块会导致语法错误。这是因为Python解释器将代码块视为单个语句。要解决此问题,可以采用以下几种方法:使用管道要克服语法错误,请使用 echo 命令将代码块作为一系列输入行重定向到 Python:echo -e ...
    编程 发布于2024-11-07
  • 如何在 PHP 中从 MySQL 迁移到 MySQLi?
    如何在 PHP 中从 MySQL 迁移到 MySQLi?
    从 MySQL 迁移到 MySQLi将网站从 MySQL 迁移到 MySQLi 需要修改 PHP 代码,但数据库本身基本上不受影响。 MySQLi 是 MySQL 扩展的改进版本,提供增强的功能和安全性。PHP 代码更改是的,您可以简单地将 MySQLi 函数替换为 MySQL 函数。这里有一个快速...
    编程 发布于2024-11-07
  • 如何在CSS中实现背景和子元素的不同透明度?
    如何在CSS中实现背景和子元素的不同透明度?
    理解 CSS 背景不透明度在 CSS 中,不透明度控制元素的透明度。当应用于容器时,它自然会影响背景及其子元素。继承问题要实现背景和子元素不同的不透明度, CSS 继承带来了挑战。子元素从其父容器继承不透明度,从而导致所提供示例中的背景和文本具有相同的不透明度。实现所需不透明度的解决方案实现要达到所...
    编程 发布于2024-11-07
  • 【个人网站】Next如何集成Notion数据库
    【个人网站】Next如何集成Notion数据库
    To integrate a Notion database into a Next.js project, you can use Notion as a content management system (CMS) and display its content on your website...
    编程 发布于2024-11-07
  • 为什么 PhpMyAdmin 在 Ubuntu 12.04 上给出“MySQLi 扩展缺失”错误?
    为什么 PhpMyAdmin 在 Ubuntu 12.04 上给出“MySQLi 扩展缺失”错误?
    PhpMyAdmin 错误:MySQLi 扩展缺失在 Ubuntu 12.04 上遇到 PhpMyAdmin 问题?尽管安装了 Apache2、PHP5、MySQL 和 PhpMyAdmin,您还是遇到了“mysqli 扩展丢失”错误。尽管您已取消注释 php.ini 中的“extension=my...
    编程 发布于2024-11-07
  • 如何使用 java.net.URLConnection 将文件和附加参数上传到 HTTP 服务器?
    如何使用 java.net.URLConnection 将文件和附加参数上传到 HTTP 服务器?
    在 Java 中使用附加参数将文件上传到 HTTP 服务器将文件上传到 HTTP 服务器是许多应用程序的常见需求。但是,有时还需要随文件一起传递附加参数。这是一个允许您在不使用外部库的情况下发送文件和参数的解决方案:java.net.URLConnection 和 Multipart/Form-Da...
    编程 发布于2024-11-07
  • 如何在 PHP 中逐行读取和处理文本文件?
    如何在 PHP 中逐行读取和处理文本文件?
    在 PHP 中读取文本文件:分步指南许多 Web 开发场景都涉及从文本文件读取数据。在 PHP 中,文件处理函数提供了逐行读取纯文本文件的便捷方法。让我们分解一下使用 PHP 读取文本文件的过程。读取文本文件的代码:以下 PHP 代码片段演示了如何读取文本文件并逐行处理其内容:<?php //...
    编程 发布于2024-11-07

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3