Astro 宣布:将超过 500 多个测试从 Mocha 迁移到了 Node.js

开发 前端
“Node.js 测试运行器仍然年轻,并且在积极开发中,有望变得更好。例如,Node.js 项目目前正在评估在我们提出使用案例后使用主进程运行测试”。

近期,Astro 在其官方博客中宣布,虽然我们对 Mocha 感到满意,但也在寻求让我们的 CI 作业更快的方法。最终将超过 500 多个测试从 Mocha 迁移到了 Node.js。

先了解下 Astro 是什么?Astro 是适合构建像博客、营销网站、电子商务网站这样的以内容驱动的网站的 Web 框架。没有强绑定一些 UI 框架,它支持像 React、Preact、Svelte、Vue、Solid、Lit、HTMX、Web 组件等这些前端 UI 框架。

一开始,Astro 只是迁移了一个尚未使用 astro 集成套件的软件包:create-astro,由 Mocha 转为使用 Node.js 内置断言库 node:assert。

当成功迁移了第一个包后,潘多拉的盒子便已打开。之后开始尝试迁移 @astrojs/node 包的测试套件。这个集成是 Astro 下载量最大的集成之一。

根据其博客描述,对最终的结果是感到满意的。在迁移之后没有看到性能出现任何显著退化。

Node.js 内置测试模块毕竟还比较新,在实现过程中也有遇到一些问题的,例如:

  • 一开始发现 “Node.js 测试运行器比 Mocha 慢得多”,经过调查发现是 Node.js 为每个测试文件生成了一个新进程,以确保每个测试套件都在隔离的环境中运行。这样好处是保证了测试环境不会被污染。但通过创建一个临时文件,导入所有的测试套件,让 Node.js 执行该文件,这样可在性能上得到保证。
  • 不能传递 --test-concurrency 标志(仅在 Node.js 21 及以上版本可用)
  • 参数名称冗长:

--test-name-pattern 而不是 --match,-m 参数;

--test-timeout 而不是 --timeout,-t 参数,等等。

  • Mocha 中只需使用 it.only 就可以运行单个测试套件。而 Node.js 中你必须:
  • 使用 --test-only 参数运行 CLI
  • 将 .only 添加到包含要运行的 it.only 的 describe 中。
  • 如果有多个 describe 实例,所有这些实例都需要标记为 .only。

对于 Astro 来讲,使用 Node.js 内置测试运行器,对于它们的主 monorepo 有一些优势:

  • 减少了我们 monorepo 中需要安装和维护的依赖项:mocha 和 chai。
  • API 迁移成本:Node.js 断言模块几乎提供了我们所需的所有功能,因此从 chai 迁移并不像我们想象的那么痛苦。
  • 可维护性:有更多的人参与 Node.js 项目来维护 Node.js 测试运行器。
  • 未来的好处:我们相信测试运行器会随着时间的推移而改进,并最终节省我们 CI 工作流程中的一些时间。

Astro 在其博客最后由提到以下两句话:

“Node.js 测试运行器仍然年轻,并且在积极开发中,有望变得更好。例如,Node.js 项目目前正在评估在我们提出使用案例后使用主进程运行测试”。

“以真正的开源合作精神,我们很高兴通过将我们的测试切换到 Node.js 来改进 Astro,反过来也将改进 Node.js 本身!”

这也是一种相互合作,相互成就吧!感谢 Astro 能够促进 Node.js 内置测试模块的发展!

参考 https://astro.build/blog/node-test-migration/

责任编辑:武晓燕 来源: Nodejs技术栈
相关推荐

2012-05-30 09:12:46

NodeJSRubyRails

2022-05-18 09:48:07

ArmGitHubGitLab

2021-11-29 09:44:03

UmiJSVite前端

2011-04-25 09:35:31

TwitterJava

2012-10-24 14:56:30

IBMdw

2021-07-09 00:24:10

No.jsNode.js原理

2017-03-22 11:32:17

Node.js单元测试

2013-04-27 10:37:35

Python

2022-11-01 08:55:55

编译工具MavenSpring

2011-12-14 10:06:55

UnixLinux服务器

2015-03-10 10:59:18

Node.js开发指南基础介绍

2013-11-01 09:34:56

Node.js技术

2013-03-08 09:54:00

BAENode.js百度云

2020-10-13 18:16:19

微服务架构数据

2022-10-12 08:00:00

语音识别Node.js音频质量

2016-05-18 10:15:25

PythonNode.js

2011-09-08 13:46:14

node.js

2011-09-02 14:47:48

Node

2011-09-09 14:23:13

Node.js

2011-11-01 10:30:36

Node.js
点赞
收藏

51CTO技术栈公众号