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

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

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

但这些测试是为了什么?

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

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]删除
最新教程 更多>
  • 用户本地时间格式及时区偏移显示指南
    用户本地时间格式及时区偏移显示指南
    在用户的语言环境格式中显示日期/时间,并使用时间偏移在向最终用户展示日期和时间时,以其localzone and格式显示它们至关重要。这确保了不同地理位置的清晰度和无缝用户体验。以下是使用JavaScript实现此目的的方法。方法:推荐方法是处理客户端的Javascript中的日期/时间格式化和时...
    编程 发布于2025-07-06
  • 如何使用不同数量列的联合数据库表?
    如何使用不同数量列的联合数据库表?
    合并列数不同的表 当尝试合并列数不同的数据库表时,可能会遇到挑战。一种直接的方法是在列数较少的表中,为缺失的列追加空值。 例如,考虑两个表,表 A 和表 B,其中表 A 的列数多于表 B。为了合并这些表,同时处理表 B 中缺失的列,请按照以下步骤操作: 确定表 B 中缺失的列,并将它们添加到表的末...
    编程 发布于2025-07-06
  • eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    eval()vs. ast.literal_eval():对于用户输入,哪个Python函数更安全?
    称量()和ast.literal_eval()中的Python Security 在使用用户输入时,必须优先确保安全性。强大的Python功能Eval()通常是作为潜在解决方案而出现的,但担心其潜在风险。 This article delves into the differences betwee...
    编程 发布于2025-07-06
  • 如何简化PHP中的JSON解析以获取多维阵列?
    如何简化PHP中的JSON解析以获取多维阵列?
    php 试图在PHP中解析JSON数据的JSON可能具有挑战性,尤其是在处理多维数组时。要简化过程,建议将JSON作为数组而不是对象解析。执行此操作,将JSON_DECODE函数与第二个参数设置为true:[&&&&& && &&&&& json = JSON = JSON_DECODE($ j...
    编程 发布于2025-07-06
  • Java中如何使用观察者模式实现自定义事件?
    Java中如何使用观察者模式实现自定义事件?
    在Java 中创建自定义事件的自定义事件在许多编程场景中都是无关紧要的,使组件能够基于特定的触发器相互通信。本文旨在解决以下内容:问题语句我们如何在Java中实现自定义事件以促进基于特定事件的对象之间的交互,定义了管理订阅者的类界面。以下代码片段演示了如何使用观察者模式创建自定义事件: args)...
    编程 发布于2025-07-06
  • 图片在Chrome中为何仍有边框?`border: none;`无效解决方案
    图片在Chrome中为何仍有边框?`border: none;`无效解决方案
    在chrome 中删除一个频繁的问题时,在与Chrome and IE9中的图像一起工作时,遇到了一个频繁的问题。和“边境:无;”在CSS中。要解决此问题,请考虑以下方法: Chrome具有忽略“ border:none; none;”的已知错误,风格。要解决此问题,请使用以下CSS ID块创建带...
    编程 发布于2025-07-06
  • PHP未来:适应与创新
    PHP未来:适应与创新
    PHP的未来将通过适应新技术趋势和引入创新特性来实现:1)适应云计算、容器化和微服务架构,支持Docker和Kubernetes;2)引入JIT编译器和枚举类型,提升性能和数据处理效率;3)持续优化性能和推广最佳实践。 引言在编程世界中,PHP一直是网页开发的中流砥柱。作为一个从1994年就开始发展...
    编程 发布于2025-07-06
  • 如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    如何从PHP中的Unicode字符串中有效地产生对URL友好的sl。
    为有效的slug生成首先,该函数用指定的分隔符替换所有非字母或数字字符。此步骤可确保slug遵守URL惯例。随后,它采用ICONV函数将文本简化为us-ascii兼容格式,从而允许更广泛的字符集合兼容性。接下来,该函数使用正则表达式删除了不需要的字符,例如特殊字符和空格。此步骤可确保slug仅包含...
    编程 发布于2025-07-06
  • 如何克服PHP的功能重新定义限制?
    如何克服PHP的功能重新定义限制?
    克服PHP的函数重新定义限制在PHP中,多次定义一个相同名称的函数是一个no-no。尝试这样做,如提供的代码段所示,将导致可怕的“不能重新列出”错误。 但是,PHP工具腰带中有一个隐藏的宝石:runkit扩展。它使您能够灵活地重新定义函数。 runkit_function_renction_re...
    编程 发布于2025-07-06
  • 找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    如何在mySQL中使用mySql 检索最大计数,您可能会遇到一个问题,您可能会在尝试使用以下命令:理解错误正确找到由名称列分组的值的最大计数,请使用以下修改后的查询: 计数(*)为c 来自EMP1 按名称组 c desc订购 限制1 查询说明 select语句提取名称列和每个名称...
    编程 发布于2025-07-06
  • 如何使用Regex在PHP中有效地提取括号内的文本
    如何使用Regex在PHP中有效地提取括号内的文本
    php:在括号内提取文本在处理括号内的文本时,找到最有效的解决方案是必不可少的。一种方法是利用PHP的字符串操作函数,如下所示: 作为替代 $ text ='忽略除此之外的一切(text)'; preg_match('#((。 &&& [Regex使用模式来搜索特...
    编程 发布于2025-07-06
  • Python中嵌套函数与闭包的区别是什么
    Python中嵌套函数与闭包的区别是什么
    嵌套函数与python 在python中的嵌套函数不被考虑闭合,因为它们不符合以下要求:不访问局部范围scliables to incling scliables在封装范围外执行范围的局部范围。 make_printer(msg): DEF打印机(): 打印(味精) ...
    编程 发布于2025-07-06
  • 如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    编程 发布于2025-07-06
  • 在JavaScript中如何并发运行异步操作并正确处理错误?
    在JavaScript中如何并发运行异步操作并正确处理错误?
    同意操作execution 在执行asynchronous操作时,相关的代码段落会遇到一个问题,当执行asynchronous操作:此实现在启动下一个操作之前依次等待每个操作的完成。要启用并发执行,需要进行修改的方法。 第一个解决方案试图通过获得每个操作的承诺来解决此问题,然后单独等待它们: co...
    编程 发布于2025-07-06
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, AttributeError: SomeClass...
    编程 发布于2025-07-06

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

Copyright© 2022 湘ICP备2022001581号-3