本文适用于 EDOCODE 2024 年降临节日历,于 2024 年 12 月 16 日发布。
上一篇文章由 EDOCODE 产品经理 Taiji Yamada 撰写:使用 Notion Webhooks 和无代码工具“Make”的自动化电子邮件系统(文章为日语)。
另外,请查看我们母公司集团公司的和之降临节日历!
我们的应用程序 Gojiberry 是一款 Shopify 调查应用程序,可帮助商家从客户那里收集有价值的反馈。
从一开始,我们就通过测试驱动开发 (TDD) 来构建 Gojiberry,以确保我们的应用程序没有错误,并且我们可以在不破坏现有功能的情况下自信地发布新功能。这个基础使我们能够进行大规模的更改,例如从 Create React App (CRA) 迁移到 Vite,同时将干扰降至最低。
当 CRA 被弃用并且它的依赖项变得过时时,我们决定是时候升级到现代构建工具,以更好地支持我们不断增长的应用程序。我们的代码库规模较大,增加了一些复杂性,但事实证明,转向 Vite 的努力是值得的。
我们的目标是迁移我们的两个 React 项目:
如果您是 Shopify 店主,希望收集可行的客户反馈,请立即在 Shopify 应用商店中试用 Gojiberry!
CRA 过去为我们提供了很好的服务,但它不再被维护,而且它的依赖项也已经过时了。这带来了一些挑战:
用户事件 v14 中最大的改进之一是要求对所有交互方法使用 wait。这消除了在await waitFor 中包装操作的需要,使测试代码更干净且更易于维护。
之前(用户事件 v13):
import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import MyComponent from './MyComponent'; test('updates state on click', async () => { render(<MyComponent />); userEvent.click(screen.getByRole('button')); await waitFor(() => { expect(screen.getByText('Updated state')).toBeInTheDocument(); }); });
之后(用户事件 v14):
import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import MyComponent from './MyComponent'; test('updates state on click', async () => { render(<MyComponent />); userEvent.click(screen.getByRole('button')); await waitFor(() => { expect(screen.getByText('Updated state')).toBeInTheDocument(); }); });
此更改无需使用 waitFor 显式管理状态更改,从而简化了测试。开发人员不再需要考虑何时包含await waitFor,因为库会自动处理它。
用户事件 v14 和 Vitest 的改进解决了其中许多问题,提供了更干净、更快、更一致的开发体验。
在选择 Vite 之前,我们评估了 Next.js 和 Remix。虽然两者都是强大的框架,但它们需要对我们的代码库和基础设施进行重大更改:
Next.js 和 Remix:
为什么我们选择Vite:
通过选择 Vite,我们避免了采用成熟框架的复杂性,同时获得了现代轻量级构建工具的好处。
我们系统地进行了迁移,因为我们的 monorepo 包含两个独立的 npm 项目。以下是我们执行迁移的方式:
从较小的项目开始:
迁移步骤:
每个项目的流程都遵循以下步骤:
对更大的项目重复:
从 CRA 迁移到 Vite,以及向 Vitest 和用户事件 v14 的过渡,为我们的开发工作流程带来了重大改进:
迁移改变了游戏规则,使我们能够更快地迭代,同时保持对代码库的信心。
以下是我们的一些经验总结:
从 CRA 迁移到 Vite 和 Vitest 为我们的工作流程带来了显着改进。现在,由于更严格的 TypeScript 规则,我们可以享受更快的构建、带有用户事件 v14 的更干净的测试代码以及更具弹性的代码库。
使这一过渡更加顺利的关键因素之一是我们对测试驱动开发 (TDD) 的早期投资。通过一套全面的测试,我们能够自信地进行大规模更改,而不会破坏现有功能。
如果您正在考虑进行类似的迁移,我们希望我们的经验能够提供宝贵的见解来指导您的旅程。
明天,2024 年 12 月 17 日,这篇文章将是 从 B2C 转向 B2B:营销人员的自白,作者:Gojiberry 产品营销经理 Amee Xu。
和之集团,我们正在招聘!如果您有兴趣,请使用以下链接查看我们的空缺职位:
工作机会 |和之集团
以上是从 React CRA 和 Jest 迁移到 Vite 和 Vitest 的经验教训的详细内容。更多信息请关注PHP中文网其他相关文章!