有效的前端测试

有效的前端测试

面试已经有一段时间了。在这个痛苦的过程中最突出的是,如果提出测试问题,面试就注定失败。这是因为我的经验主要是前端开发,而我待过的两家公司在前端测试方面都很差。

— 如果想直接进入讨论请跳过—

从某种意义上说,我的缺乏是行业文化的副产品。前端测试一直是一件事,但十年前,公司结构已经将测试问题与开发过程分开。因此,我们有一个专门的 QA 团队,他们将为我们的开发人员编写 E2E/自动化测试。所以测试甚至没有出现在工作描述中。此外,小型初创公司的不幸事实是交付始终高于一切,因此由于测试会阻碍生产力,因此我们开发人员没有进行测试。我们甚至没有在存储库中安装任何测试库(Jasmine/Mocha/PhantomJS…)。

我在一家更大的公司找到了第二份工作(消费者平台团队有大约 150 名开发人员?)。然而,从本质上讲,并没有进行任何测试。每个团队(按结帐、忠诚度、注册等功能划分的团队)再次有专门的 QA 成员来编写这些 E2E 测试。一旦这种文化形成并且质量保证从预算中削减,就没有人接受它们,因为没有人可以向他们学习。我试图为我们的团队进行一些 E2E 测试,但留下的代码甚至无法正常工作,而且充满了明显的错误(很多 WTF)。再加上时间紧迫,测试又落后了。人们唯一一次谈论测试是实用函数和自定义反应钩子。

立即学习“前端免费学习笔记(深入)”;

—讨论开始—

受到无测试文化的困扰,我至少必须想出一些我可以在面试中抽象地谈论测试的东西。我将跳过不测试样式或实现之类的常见废话。

请随意添加到讨论中。这影响了我至少 300 名过去的同事!

1.) 测试全局状态:
根据我的经验,最粗糙的功能之一是“如果发生这种情况,我们会自动为您执行此操作”类型的行为。例如,我拥有的一个应用程序是一个可高度配置的图形可视化仪表板。一项配置更改可能会导致其他配置也发生更改,具体取决于返回的数据以及未返回的数据。一些配置副作用并不直接。因此,您需要测试自动配置更改以及状态是否全面持久/未更改/一致。因此,如果您围绕此类行为进行测试,与 PM、经理、设计和 QA 团队保持一致是非常有价值的。

2.)不要花太多时间测试 UI 输入的完整性:
我看到很多教程都在谈论测试输入,例如当我在搜索栏中输入“泰勒·斯威夫特”并按 Enter 键时,我们的搜索功能将获得泰勒·斯威夫特作为输入。

这完全没有帮助。如果您的数据绑定被破坏,那么很明显您应该在开发时自己捕获它,或者它不能自动测试,因为某些东西阻碍了功能,例如搜索栏上方的不可见 div,因此用户无法输入搜索。

如果你是通过代码行付费的,那就继续吧:)

3.)测试输入作为输入的副作用是可取的:
与第二点相反,您需要测试对用户交互完全产生副作用的功能调用。例如,当用户单击按钮时,应调用请求来注册该用户操作以进行数据分析。这种与核心功能完全分离的副作用应该自动测试,这样我们就不会因一些无意的更改而措手不及。非核心副作用对于其他团队来说可能是至关重要的,我曾在其他团队之一中工作:D

那么如何构建这些测试需求呢?
让我们分解一下前端架构:MVC(你可以说你是 MVVM 或者什么不是,这并不重要)。

V – 视图 (html/jsx): 这非常适合 E2E/无头浏览器测试,并且是行业标准。

C – 控制器(业务逻辑):花一些时间确保功能正确。例如,如果您具有/抽象为纯函数,那么预期的输入输出过程是否仍然完好无损?有点行业标准,但人们通常不会费心将有状态函数变成纯函数并进行测试。

M – 模型(api 调用/状态): 这是我最想关注的。您的(非渲染)状态应该是全局的并且每个概念都是单例的。这不是什么新想法,因为 Redux 基本上就是这样。然而,出于我们的测试目的,它不一定是 Flux。您可以拥有 jotai 原子,但您可以编写一个包装器,以便可以公开集中的 setter 函数进行测试。

应该在您的 api 调用/第三方库上执行类似的操作。它应该是全局的和单例的,以便您可以自信地测试“当我这样做时,是应用程序中进行的核心/非核心 api 调用”。以我有限的经验,这是在后端应用程序中例行完成的。它也应该在前端应用程序中完成。

这听起来怎么样?我确信已经有人这样做了,你的经验是什么?有什么可以改进的?我很想听听人们的意见,他们认为前端测试不仅仅是 E2E/无头浏览器和简单的单元测试。

以上就是有效的前端测试的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1491392.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 13:55:39
下一篇 2025年12月19日 13:55:44

相关推荐

  • Marked.js解析Markdown内容:正确配置与安全注意事项

    本教程旨在解决使用marked.js库在react等前端框架中解析markdown内容时遇到的常见问题,特别是关于sanitize选项的配置。我们将详细说明如何正确设置marked.js的选项并通过marked.parse()方法进行内容转换,以确保markdown预览器正常工作。同时,文章将强调m…

    2025年12月23日
    000
  • Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性

    本文深入探讨vue.js应用中图片无法正常显示的常见原因,特别是由于组件挂载范围不当和dom元素id重复导致的绑定失效。教程将详细解释vue应用挂载机制,并通过代码示例演示如何正确配置vue实例的作用域,确保数据绑定和视图更新按预期工作,从而有效解决图片显示问题。 在使用Vue.js开发前端应用时,…

    2025年12月23日
    000
  • 修复UI元素交互障碍:从“开始”按钮到信息框的平滑过渡实现

    本文旨在解决前端开发中常见的ui交互问题:当一个隐藏的元素(如信息框)在视觉上覆盖了可点击元素(如“开始”按钮)时,导致按钮无法响应点击事件。核心解决方案是利用css的display属性来精确控制元素的可见性和交互性,确保隐藏元素不阻碍底层元素的事件捕获,同时实现平滑的过渡效果。 在构建交互式网页应…

    2025年12月23日
    000
  • Vue.js 动态表单:实现下拉框选择“其他”时切换为文本输入框

    本文将详细介绍如何在Vue.js应用中实现一个动态UI组件:当用户在下拉框中选择“其他”选项时,该下拉框自动切换为一个文本输入框,以便用户输入自定义内容。我们将利用Vue的条件渲染指令v-if和v-else来高效地管理组件的显示逻辑,并探讨数据绑定、状态管理及用户体验方面的实现细节。 在现代前端应用…

    2025年12月23日
    000
  • 解决HTML input type=”number” 值仍为字符串的问题

    在使用HTML的input type=”number”时,JavaScript获取到的event.target.value始终是字符串类型,而非数字类型。本文将深入解析这一常见现象的原因,并提供多种可靠的JavaScript类型转换方法,如Number()、parseInt(…

    2025年12月23日
    000
  • JavaScript条件判断中的常见陷阱与DOM操作优化实践

    本文旨在探讨javascript条件判断中常见的赋值运算符误用问题,并提供一套系统的解决方案,包括如何正确区分赋值与比较运算符、利用浏览器调试工具定位逻辑错误,以及通过数组和循环优化重复的dom操作,从而提升代码的健壮性、可维护性和可扩展性。 在前端开发中,我们经常需要根据动态数据来更新页面UI,例…

    2025年12月23日
    000
  • JavaScript中如何高效随机化对象数组:以问答系统为例

    本教程详细讲解了在javascript中如何对包含自定义类实例的对象数组进行随机化操作,以实现如问答系统中的题目随机展示。文章涵盖了从数组中随机选择单个元素、使用fisher-yates洗牌算法打乱整个数组顺序等核心技术,并提供了清晰的代码示例和最佳实践,帮助开发者构建动态且用户体验友好的应用。 在…

    2025年12月23日
    000
  • 在Ionic/Angular应用中有效覆盖:host样式的指南

    在ionic/angular开发中,覆盖组件的`:host`样式,尤其是框架预设样式,常因css层叠与优先级规则而面临挑战。本文将深入探讨`:host`选择器的特性,解释css如何决定样式应用顺序,并提供实用策略,包括利用样式导入顺序、提升选择器优先级,以及在必要时使用`!important`,帮助…

    2025年12月23日
    000
  • JavaScript:利用按钮和标志位优雅控制函数内循环

    本文将详细介绍在javascript中,如何通过结合使用按钮事件、全局标志变量以及递归`settimeout`模式,实现对函数内部模拟循环的启动与停止控制。这种方法避免了传统`for`循环的阻塞问题,并提供了用户友好的交互方式来管理长时间运行的异步操作。 引言:前端循环控制的挑战 在前端开发中,执行…

    2025年12月23日
    000
  • JavaScript中数组对象布尔值切换的正确姿势:避免三元运算符陷阱

    本文将深入探讨在JavaScript中,如何正确地在数组中的对象内切换布尔值,特别是针对常见的“已读”状态切换场景。我们将分析一个典型的错误用法——误用三元运算符导致布尔值无法正确反转,并提供两种有效的解决方案:利用条件判断的三元运算符和更简洁的逻辑非操作符(!)。此外,文章还将强调直接操作对象引用…

    2025年12月23日
    000
  • Vue 3 v-for 循环中实现按钮单选与切换激活状态教程

    针对Vue 3中`v-for`循环渲染的按钮组,本文将详细介绍如何实现单选模式下的激活状态管理。通过Composition API和响应式数据,我们将学习如何确保每次只有一个按钮处于激活状态,并支持点击已激活按钮进行切换,使其变为非激活状态,从而提供灵活的用户交互体验。 引言 在现代前端应用中,列表…

    2025年12月23日
    000
  • Vue 3 中实现点击表格单元格切换文本显示状态的教程

    本教程详细介绍了如何在 vue 3 应用中,通过点击表格(` `)单元格来动态切换其显示文本内容,例如从截断文本切换到完整文本。我们将利用 vue 的响应式引用(`ref`)来管理单元格的展开状态,并结合条件渲染实现这一交互功能,提升用户体验。 在现代前端应用中,表格是展示大量数据的重要组件。为了保…

    2025年12月23日
    100
  • JavaScript事件处理中的精确DOM操作与样式管理

    本文旨在解决javascript事件处理中常见的dom元素样式误改问题。通过分析点击事件中全局选择器导致的样式污染,文章将详细阐述如何利用局部dom查询方法(如queryselector)精确地修改特定父元素下的子元素样式,并提供示例代码和最佳实践,确保交互行为仅影响目标元素,从而提升前端开发的精准…

    2025年12月23日
    000
  • 在React JS中实时检测输入框是否为空或仅包含空格

    本教程将指导您如何在react js应用中实时检测文本输入框的值是否为空或仅包含空格,并根据检测结果动态显示默认文本或用户输入。我们将采用react的状态管理和条件渲染机制,避免直接dom操作,以实现更健壮和符合react范式的解决方案。 在构建交互式前端应用时,实时验证用户输入是常见的需求。特别是…

    2025年12月23日 好文分享
    000
  • 如何在HTML元素悬停时显示动态数据提示

    本文详细介绍了如何在Angular等前端框架中,利用HTML的`title`属性为元素添加动态数据提示(tooltip)。通过将表达式(如`{{ row.boxes.length }}`)嵌入到`title`属性中,可以实现在用户鼠标悬停时,显示包含实时计算结果的文本提示,从而提升用户体验,并避免直…

    2025年12月23日
    000
  • Vue 3 v-for 循环中实现按钮激活状态切换:单选与多选模式教程

    本教程详细讲解了如何在 vue 3 的 `v-for` 循环中管理按钮的激活状态。我们将探讨两种常见场景:单选模式(一次只能选择一个或不选)和多选模式(可以同时选择多个)。通过 composition api 和响应式数据,您将学习如何高效地实现按钮的点击切换、样式绑定以及数据同步,从而构建灵活的用…

    2025年12月23日
    000
  • Vue 3 v-for 循环中实现按钮的单选与切换激活状态

    本教程详细介绍了如何在 Vue 3 的 `v-for` 循环中,为一组按钮实现单选(一次只能激活一个或无激活)及点击已激活按钮进行切换(取消激活)的功能。文章将通过 Composition API 结合响应式状态管理,提供清晰的代码示例和实现步骤,帮助开发者高效构建交互式筛选或标签页组件。 引言 在…

    2025年12月23日
    000
  • JavaScript动态操作HTML元素:实现可扩展的迭代控制

    本教程旨在解决javascript中硬编码html元素id导致的可扩展性问题。通过介绍模板字符串和循环结构,文章演示了如何动态生成元素id并进行迭代操作,从而实现对多个相似html元素的高效、可维护控制。内容涵盖了从基础的id拼接、模板字符串的使用,到更高级的`queryselectorall`方法…

    2025年12月23日 好文分享
    000
  • Vue 3:点击表格单元格动态切换截断与完整文本显示

    本教程详细介绍了在 vue 3 中,如何通过点击表格单元格( )来动态切换其显示内容,实现截断文本与完整文本之间的切换。核心方法是利用 vue 的响应式引用(ref)来管理当前展开的状态,并结合条件渲染(v-text)来根据状态显示不同的内容。文章提供了清晰的代码示例和实现步骤,帮助开发者优化表格的…

    2025年12月23日
    000
  • JavaScript打字机效果:实现文本打字完成后的顺序交互

    本文深入探讨如何在JavaScript中实现文本打字机效果,并着重讲解如何优雅地处理打字完成后触发的后续交互,例如显示“下一段”按钮或启动新内容。我们将通过递归setTimeout和可控的setInterval两种方法,结合回调函数机制,构建一个灵活且易于扩展的文本展示系统,确保内容按序呈现并提供用…

    2025年12月23日
    000

发表回复

登录后才能评论
关注微信