首页 web前端 js教程 关于 ThoughtWorks Radar 4 的思考

关于 ThoughtWorks Radar 4 的思考

Nov 04, 2024 am 06:02 AM

Thoughts on ThoughtWorks Radar 4

ThoughtWorks 2024 Radar 已发布(您可以一键下载 PDF,无需烦人的注册)。以下是两件事:

  1. 我讲述了我在组件测试中感到困惑的事情
  2. 很酷的新工具,用于调查或找出他们从“评估”到“采用”的原因

如果您只是想了解一些很酷的新东西,请跳过我的组件测试咆哮。

组件测试:采用

我对这个“采用”有很多疑问。我现在的雇主投入了大量的培训和工具来帮助团队进行组件测试,这是我喜欢的。我不喜欢的是另一种测试技术,它的定义因谈论它的人而异。

让我按照我了解它们的时间顺序概述一下我在野外看到的几个定义,我认为_ThoughtWorks 的定义是最后一个:

  • Storybook 帮助单独测试 React 组件,被组件框架作者大量使用
  • 使用 Cypress 的组件测试在隔离的浏览器环境中测试组件
  • 我对赛普拉斯白盒测试的最新定义,意味着所有外部 I/O 调用(fetch/xhr、加载 JSON、读取本地存储等)都是 cy.intercepted 或存根/模拟

这些都不一样。上述上下文中的组件是指 UI 组件,类似于 a 或 a,它由许多其他组件、代码和 CSS 组成。我说“有点”,因为在 Storybook 和 Cypress 中,你使用的是真正的浏览器,而不是像 JSDom 这样的假浏览器。在这种情况下,我相信使用真正的浏览器可以解决很多问题,特别是围绕验收测试,而不是单元测试。我的经历与他们所引用的相反:你可以使 Cypress/Playwright 变得非常快(使用像 it.only 之类的东西,大量存根,设计你的 UI 以更加解耦来测试特定的用户流),以及数量对于用户来说,我对应用程序的运行充满信心。考虑到 Elm 的类型系统,这是您验证 Elm 代码中是否存在竞争条件的主要方法,而且这很好,因为您可以花更多时间使用该技术编写验收测试。 Cypress 白盒测试并不脆弱;它们具有确定性,这就是我们都喜欢它们的原因。

但是,我确实承认调试可能具有挑战性。仅仅因为你“在浏览器中”并不总是能让你广泛地了解为什么某些东西会崩溃,尽管有断点、调试器关键字、编译的源代码、对网络调用的洞察以及各种日志都可供你使用(不是开玩笑) ,即使如此,你仍然可以说“伙计,为什么这不起作用……”)

接下来,ThoughtWorks 和 Cypress 都引用了“端到端”测试。这里的定义也很模糊。以下是我见过的一些定义:

  • Dave Farley 的 e2e 方案,基本上是验证“所有事物”协同工作(不要与早期 All Up 测试的推动相混淆)
  • 赛普拉斯的黑盒测试,您不会存根/模拟 ajax 调用和其他 I/O,这只是测试“您的站点及其集成”
  • ThoughtWorks 似乎在说 Playwright/Cypress/Selenium 主要是 e2e 工具,我将它们视为验收测试工具,不包括 Cypress 组件测试功能,这与 Storybook 有点相似
  • 希勒尔·韦恩也这么称呼他们

最后,我从来不喜欢 React 的组件测试扩展。它们充斥着大量的模拟/副作用,并强烈鼓励您使用 JQuery 技能来验证“我的组件正确渲染”,这并不总是等同于“正确工作”,感觉就像打破抽象,并测试 React 是否正确正在工作。相反,无论是 React、Angular 还是 Elm,我一直觉得测试你的代码是有效的,主要创建纯组件,并测试你在验收测试(Cypress 或 Playwright)中验证的“智能组件”(例如具有副作用的组件) .

JavaScript Web 开发人员有不同的观点和不同的单词定义。这通常很好,但作为一个将 ThoughtWorks 作为年轻成年英雄的人,不断推荐 Martin Fowler 和其他 ThoughtWorks 撰写的作品作为学习的精彩建议,并且活动希望有一天与他们合作......你可以明白为什么这种完全相反的观点是给我带来了信仰危机。

所以:

  1. 同意以各种形式进行组件测试
  2. 不同意 JSDom 并在您选择的单元测试语言中“断言我的组件的列表项 2 有一个粗体标记,内部文本为‘cow’”。

无论如何,以上内容在各种语言中都有细微差别。例如,Angular 和 Lit/WebComponents,如果您避免模板具有超出 if 的任何逻辑,并将绑定切换到公共组件变量,那么与 React 和其他公开的当前框架相比,单元测试和断言副作用会更容易。然而,Angular 和一些 WebComponent 框架需要冗长的设置代码,这些代码本身极难调试,而 React/Elm 则相反。

此外,我知道创建这些 PDF 是一项艰巨的工作,尝试总结技术方面的任何内容也是如此,所以我确信我只是缺少大量的上下文。

持续部署:采用

看到我的首席执行官在年度演讲中谈论这一点,真是太棒了。我知道尝试最小 CD 的活动对人们来说可能是一个巨大的改变,但这是我在工作中见过的最好的方式,很高兴看到它在采用中被明确地调用。

傀儡:评估

当 Zio 创建者参与创建这个名为 Golem 的不会崩溃的状态机即服务时,我感到非常兴奋。我更加兴奋,因为他们支持 Grain,一种 OCAML 风格的 FP 健全类型语言。我永远找不到时间/灵感去玩,因为我仍然感觉自己陷入了“一切都是 AWS”的漩涡中。是的,我在生产中使用过 CloudFlare,但是……作为 AWS Step Functions 的粉丝,这似乎是一个很酷的主意。其中一个周末我会再次尝试使用 TypeScript,因为 Grain 似乎不再是一种选择。

布鲁诺:采用

许多 REST 客户端(其中一些内置于 VSCode 中)正被各种公司阻止,因为它们在其服务器上托管您的内部 API 详细信息或将详细信息发布到其他地方。像 Postman 和 Insomnia 之类的东西已经开始要求订阅,尽管他们声称不需要,但这只会让事情变得更糟。因此,人们迫切需要寻找不共享数据的类似工具。 Bruno 是我需要检查的一个,因为我不再被允许使用 ThunderClient。

视觉回归测试工具:采用

CSS 可以通过多种方式破坏整个应用程序,并且无法轻松地进行单元测试或验收测试来防止这种情况发生。我真的很难使用早期的 React 快照工具,并且考虑到大量的误报,我觉得较小的网站没有投资回报率。 Applit 和 BackstopJS 等工具是众多工具中的一部分,包括服务,用于验证您的网站外观和工作是否正常。它们通常在管道中的验收测试之后或同时运行。我大约有 5 分钟使用 Applit 工具的经验,但绝对想看看 Backstop。

GitButler:评估

我最兴奋的是 GitButler。作为一个在经历了基于主干的开发后讨厌 Pull Requests 的人,并对围绕“抽象而不是 PR”的各种工具的状态和放弃感到失望,GitButler 看起来可以在切换到制作 PR 的 PR 的上下文中恢复我的理智。

米斯:评估

Mise 有点奇怪,因为我从来没有遇到过使用 nvm 管理 Node.js 版本和使用 pipelinev 管理/运行 Python 项目的问题,所以很好奇,可以尝试一下,看看有什么大惊小怪的。

模拟:评估

我讨厌嘲笑。我倾向于使用允许副作用的语言,并且与不遵循 Pure Core、Imperative Shell 的开发人员一起工作。因此,我能做的任何事情来更多地了解我的敌人以及如何管理它,都是对时间的一种很好的利用,Mockoon 是另一位模拟创建者。

Rspack:评估

值得庆幸的是,我从来不需要与 Webpack 集成。不幸的是,我多次受到_其他人_与 Webpack 集成的影响。 Vite 是呼吸新鲜空气的地方;超级快,而且成功了。因此,听到另一个速度竞争者是很有趣的。 Vite 获胜不仅是因为其惊人的速度,还因为出色的开发者体验,太酷了,看看 Rspack 会发生什么。

泽德:评估

尽管 VSCode 对我来说很重要,但我很高兴尝试 Zed IDE,因为内置结对编程、超快的速度,而且因为 Roc lang 创建者加入了他们的团队。

PKL:试用

我第一次转向 Pkl 是在我的 Dhall 幻灭低谷阶段(Dhall 很酷,但男人太难了),是 James Ward 带来的。它看起来是一种具有足够类型的语言,可以更安全地编译 YAML/JSON 配置文件。我已经有足够多的 YAML/JSON 错误配置破坏了生产,所以我开始寻找编译这些问题的方法,Dhall 提供了很多帮助,但是学习曲线和编译器错误很难解决,而且我从未在同行中感到兴奋。希望 Pkl 能够在这里取得进展。

结论

请务必自己下载 PDF,因为我忽略了其中的大量新技术和现有技术(法学硕士、基础设施、数据科学),我觉得这些技术很无聊,但其他人可能会觉得引人注目。

以上是关于 ThoughtWorks Radar 4 的思考的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1675
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
Python vs. JavaScript:学习曲线和易用性 Python vs. JavaScript:学习曲线和易用性 Apr 16, 2025 am 12:12 AM

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

JavaScript和Web:核心功能和用例 JavaScript和Web:核心功能和用例 Apr 18, 2025 am 12:19 AM

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

JavaScript在行动中:现实世界中的示例和项目 JavaScript在行动中:现实世界中的示例和项目 Apr 19, 2025 am 12:13 AM

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

了解JavaScript引擎:实施详细信息 了解JavaScript引擎:实施详细信息 Apr 17, 2025 am 12:05 AM

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python vs. JavaScript:社区,图书馆和资源 Python vs. JavaScript:社区,图书馆和资源 Apr 15, 2025 am 12:16 AM

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

Python vs. JavaScript:开发环境和工具 Python vs. JavaScript:开发环境和工具 Apr 26, 2025 am 12:09 AM

Python和JavaScript在开发环境上的选择都很重要。1)Python的开发环境包括PyCharm、JupyterNotebook和Anaconda,适合数据科学和快速原型开发。2)JavaScript的开发环境包括Node.js、VSCode和Webpack,适用于前端和后端开发。根据项目需求选择合适的工具可以提高开发效率和项目成功率。

C/C在JavaScript口译员和编译器中的作用 C/C在JavaScript口译员和编译器中的作用 Apr 20, 2025 am 12:01 AM

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。 1)C 用于解析JavaScript源码并生成抽象语法树。 2)C 负责生成和执行字节码。 3)C 实现JIT编译器,在运行时优化和编译热点代码,显着提高JavaScript的执行效率。

Python vs. JavaScript:比较用例和应用程序 Python vs. JavaScript:比较用例和应用程序 Apr 21, 2025 am 12:01 AM

Python更适合数据科学和自动化,JavaScript更适合前端和全栈开发。1.Python在数据科学和机器学习中表现出色,使用NumPy、Pandas等库进行数据处理和建模。2.Python在自动化和脚本编写方面简洁高效。3.JavaScript在前端开发中不可或缺,用于构建动态网页和单页面应用。4.JavaScript通过Node.js在后端开发中发挥作用,支持全栈开发。

See all articles