代码重构与测试覆盖率提升实践 | 2025 年第 46 周草梅周报

本文在 草梅友仁的博客 发布和更新,并在多个平台同步发布。如有更新,以博客上的版本为准。您也可以通过文末的 原文链接 查看最新版本。

前言

欢迎来到草梅周报!这是一个由草梅友仁基于 AI 整理的周报,旨在为您提供最新的博客更新、GitHub 动态、个人动态和其他周刊文章推荐等内容。


本周给 草梅 Authcmyr-template-cli 添加了测试覆盖率报告,可以更加清晰的衡量项目中测试覆盖的情况。

虽然说测试覆盖率高其实并不能说明项目的测试用例就写的完备了,但也能在一定程度上显示项目的代码质量是否合格。

以这次重构的 cmyr-template-cli 为例。

在添加测试用例的同时,也对项目进行了一次重构。

主要是进行了代码的拆分,以避免单文件过大。

而在这之前,核心逻辑都在一个文件里,可超过 2000 行。

而现在经过拆分后,单个文件行数都在 500 行以下,初步达到要求。

最后,对拆分出来的函数编写测试用例,测试用例就直接放在原文件边上,这样也方便查看测试用例和被测函数的具体内容。

在本地执行 npm run test 之后就可查看测试情况。

在本地执行 npm run coverage 之后就是生成测试报告,可以查看测试覆盖率。

cmyr-template-cli 是 61%,算是勉强达到了及格线。

之后,就是将报告上传到 Codecov ,就可以在页面上看到覆盖率情况了。

当然,还可以在 GitHub Action 中添加 codecov-action,以实现自动上报。

yml 复制代码
- name: Upload coverage reports to Codecov
  uses: codecov/codecov-action@v5
  with:
      token: ${\{ secrets.CODECOV_TOKEN }}

在这次重构 cmyr-template-cli 的过程中,自然也是使用了 AI。

而提示词方面则参考了《我用 AI 重构了一段 500 行的屎山代码,这是我的 Prompt 和思考过程》

应该说效果不错。

提示词改动后如下:

你是一个资深的 TypeScript 架构师。请分析下面这段代码。

告诉我它做了几件主要的事情?(职责分析) 找出所有的副作用。 找出所有的纯逻辑。 评价它的可维护性和可测试性。

非常好。现在,请你只针对纯逻辑部分进行重构。

把这些逻辑,从原函数中提取出来,变成独立的、可导出的纯函数。 这些函数必须是纯的:不能有任何副作用。 使用 TypeScript,为这些新函数的入参和返回值,提供清晰的类型定义。

你现在是一个 QA 工程师。请使用 Vitest,为你刚才提取的函数,编写全面的单元测试用例。 必须覆盖所有边界情况,包括正常、异常、和边缘值。

干得漂亮。现在,我们来重构那个原始的函数/文件。

它现在唯一的职责是协调。 调用我们刚才创建的纯函数。 把所有的副作用清晰地编排起来。 使用 async/await,让异步流程更清晰,用 try/catch 处理错误。

重构的目的还是为了更好的组织代码,而纯函数相比带副作用的函数,会更好编写测试用例。

因此,在重构的时候要优先考虑提取出纯函数逻辑,再编写副作用函数,这样一来无论是代码结构上,还是测试上都会更加友好。

后续,对 草梅 AuthRSS Impact 等项目也会做类似重构,以减少"屎山"代码。

对 cmyr-template-cli 的重构不能说完全满意,但考虑到这项目之前就是个"屎山"代码,所以从结果来说也还算不错。


近期研究了下 Tauri,这是一个基于 JavaScript 和 Rust 的跨平台开发框架。

不仅支持 Linux、macOS、Windows 等桌面端,也支持 Android 和 iOS 等手机端。

除此之外,考虑到 Tauri 还支持使用 Next.js 和 Nuxt 等全栈框架作为前端,因此用同一套代码开发出 Web 端也不是难事。

目前笔者已经在 tauri-template 中跑通了 Linux、macOS、Windows、Android 等环境的下的构建,如果有希望了解项目结构的,可以参考一下。

当然了,跨平台也不是没有代价的,从技术选型中看出,Tauri 并没有走原生开发那一套,而是选择了内嵌 webview ,通过前端技术来构建 UI。

这一点跟 uni-app 存在类似的问题

虽然说节约了原生开发的时间,但论性能的话,是比不上原生开发的(比如 Swift 和 Kotlin ),所以不适用于需要高性能 UI 的项目。

所以,如果项目真的很在意性能的话,那就选择原生开发;而如果需要跨平台,以及节约开发时间的话,Tauri 一定是个不错的选择。

GitHub Release

cmyr-template-cli

v1.42.0 - 2025-11-15 20:20:31

摘要: 版本 1.42.0 摘要:

新功能:

  • 重构核心模块结构
  • 重构 GitHub 和 Docker 初始化功能,包含工作流和依赖管理

Bug 修复:

  • 更新获取 npm 包版本的逻辑,支持提取语义版本号

代码重构:

  • 重构工具函数结构
  • 重构 git 相关功能和测试用例
  • 重构 README.md 和贡献指南初始化逻辑,提取公共模板渲染函数

最新 GitHub 加星仓库

  • CaoMeiYouRen starred dmca - 2025-11-15 16:46:08 GitHub 存储库收录收到的 DMCA 删除通知文本。GitHub 不认可或采纳这些通知中的任何主张。通知中提及的用户在被证实有罪前均视为无辜。更多关于 DMCA 政策的信息可在 GitHub 官网查询。该存储库主要使用 DIGITAL Command 语言,获得 5868 个星标。
  • CaoMeiYouRen starred blivechat - 2025-11-10 20:23:56 这是一个用于 OBS 软件的 JavaScript 插件,能够模拟 YouTube 风格的评论栏显示 bilibili 直播平台的观众互动内容。该项目在 GitHub 上获得了 2525 个星标,表明其受欢迎程度较高。该工具主要面向使用 OBS 进行 bilibili 直播的主播,帮助他们以 YouTube 的界面风格展示观众评论。

其他博客或周刊推荐

阮一峰的网络日志

阿猫的博客

潮流周刊

二丫讲梵的学习周刊

总结

本周的更新和动态如上所示。感谢您的阅读! 您可以通过以下方式订阅草梅周报的更新:

往期回顾

本文作者:草梅友仁

本文地址:blog.cmyr.ltd/archives/20...

版权声明:本文采用 CC BY-NC-SA 4.0 协议 进行分发,转载请注明出处!

相关推荐
粥里有勺糖5 小时前
视野修炼-技术周刊第127期 | Valdi
前端·javascript·github
FIT2CLOUD飞致云6 小时前
支持CAS身份认证,支持接入Oracle11数据源,SQLBot开源智能问数系统v1.3.0版本发布
ai·数据分析·开源·智能问数·sqlbot
是Yu欸7 小时前
仓颉迁移实战:将 Node.js 微服务移植到 Cangjie 的工程化评测
微服务·云原生·开源·node.js·vim·gitcode·cangjie
无限进步_10 小时前
【C语言】贪吃蛇游戏设计思路深度解析:从零开始理解每个模块
c语言·开发语言·c++·git·游戏·github·visual studio
艾迪的技术之路10 小时前
linux上gitlab runner部署文档
java·github
白衣鸽子10 小时前
ArrayUtils:Java数组操作的瑞士军刀
后端·开源·设计
ajassi200011 小时前
开源 Objective-C IOS 应用开发(九)复杂控件-tableview
ios·开源·objective-c
方圆想当图灵14 小时前
Nacos 源码深度畅游:注册中心核心流程详解
分布式·后端·github
泛联新安14 小时前
iUnit7.0重磅发布|AI驱动更智能的单元测试
人工智能·单元测试