首页 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

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

热工具

记事本++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教程
1663
14
CakePHP 教程
1420
52
Laravel 教程
1313
25
PHP教程
1266
29
C# 教程
1239
24
神秘的JavaScript:它的作用以及为什么重要 神秘的JavaScript:它的作用以及为什么重要 Apr 09, 2025 am 12:07 AM

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

JavaScript的演变:当前的趋势和未来前景 JavaScript的演变:当前的趋势和未来前景 Apr 10, 2025 am 09:33 AM

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

JavaScript引擎:比较实施 JavaScript引擎:比较实施 Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

JavaScript:探索网络语言的多功能性 JavaScript:探索网络语言的多功能性 Apr 11, 2025 am 12:01 AM

JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。

Python vs. JavaScript:学习曲线和易用性 Python vs. JavaScript:学习曲线和易用性 Apr 16, 2025 am 12:12 AM

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

如何使用Next.js(前端集成)构建多租户SaaS应用程序 如何使用Next.js(前端集成)构建多租户SaaS应用程序 Apr 11, 2025 am 08:22 AM

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库

从C/C到JavaScript:所有工作方式 从C/C到JavaScript:所有工作方式 Apr 14, 2025 am 12:05 AM

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

使用Next.js(后端集成)构建多租户SaaS应用程序 使用Next.js(后端集成)构建多租户SaaS应用程序 Apr 11, 2025 am 08:23 AM

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务

See all articles