如果我更新了一个反应模块,使得现有的代码功能但 Jest 快照测试可能会中断,那应该是主要版本的碰撞吗?

Posted

技术标签:

【中文标题】如果我更新了一个反应模块,使得现有的代码功能但 Jest 快照测试可能会中断,那应该是主要版本的碰撞吗?【英文标题】:If I update a react module such that existing code functions but Jest snapshot tests may break, should that be a major version bump? 【发布时间】:2020-06-22 20:30:09 【问题描述】:

假设我为一个 react 组件维护了一个模块,并且正在做一个 PR 以添加一个新功能。

作为该功能工作的一部分,我们还假设我已经重构了组件,以删除一些以前在您捕获渲染组件的 Jest 快照时可见的内部结构。 (假设我删除了一个内部中间组件,而不是任何影响组件的 DOM 输出的东西)。在功能上,组件是相同的,所有现有代码都是兼容的。

我是否应该将我的功能作为组件的新主要版本发布,因为某些用户的快照测试可能需要更新?还是次要版本就足够了?

【问题讨论】:

我不完全明白什么; “重构组件以删除一些以前可见的内部结构,如果您捕获了渲染组件的 Jest 快照”,实际上等同于对公共 API 的更改,或者如果这是一项功能您提供的 pkg。在确定是否要升级 Major 版本时,您必须问自己什么是在 #8 中定义的,它基本上归结为:1. 这是否改变了我已经对公共 API 进行了任何向后不兼容的更改? 2 如果是,则撞上少校,否则不要。 您需要为任何人提供更多信息才能明确回答此问题。您提供了相互矛盾的信息。你说所有现有的代码都是兼容的,然后你担心你的客户测试可能会失败。它是哪一个?请edit您的帖子。是否在您的 API 范围内捕获 Jest 快照?贴出相关的前后接口代码。如果您以前的版本包含可公开访问的界面,但不再可用,那么这是一个重大更改。 顺便说一句,你应该把你的工作分成两个提交。首先提交清理/重构工作,然后提交新功能。 这有点奇怪,但这种变化是对 API 的改进。我重写了内部结构以支持更符合人体工程学的 API,然后使用新 API 重新实现旧的、不太友好的 API,并将其标记为已弃用。这种方法使其更易于删除,并使首选 API 也成为最干净的代码路径。 【参考方案1】:

在这里回答我自己的问题。

作为RobCpoints out,归结为public API 是否已更改或损坏。经过一番思考,我相信包含在最终渲染的 DOM 中不可见的内部结构的 Enzyme 渲染的 Jest 快照更像是 private API 的泄漏,因此不打算受到保护一个重大的semver颠簸。

我将我的更改发布为次要版本。如果用户抱怨,将对此答案发表评论。

【讨论】:

以上是关于如果我更新了一个反应模块,使得现有的代码功能但 Jest 快照测试可能会中断,那应该是主要版本的碰撞吗?的主要内容,如果未能解决你的问题,请参考以下文章

更新状态数组中的一个值反应原生

我试图运行一个现有的 laravel 项目。但是在作曲家更新期间,我收到了这个错误:

在现有的 ios/android 应用程序中嵌入反应原生应用程序

我有一个现有的登录,我想进入一个src反应组件

如何在现有的 bios 中实现新功能?

打字稿:如何扩展现有的模块定义?