From c93ae0bc66cd756c3e9fa2ea362c515ee088d296 Mon Sep 17 00:00:00 2001 From: iven Date: Sun, 3 May 2026 23:04:19 +0800 Subject: [PATCH] =?UTF-8?q?test(web):=20=E6=B7=BB=E5=8A=A0=20renderWithPro?= =?UTF-8?q?viders=20=E2=80=94=20MemoryRouter=20+=20AntD=20ConfigProvider?= =?UTF-8?q?=20=E5=8C=85=E8=A3=B9=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/utils/renderWithProviders.test.tsx | 26 +++++++++++++++++++ .../src/test/utils/renderWithProviders.tsx | 25 ++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 apps/web/src/test/utils/renderWithProviders.test.tsx create mode 100644 apps/web/src/test/utils/renderWithProviders.tsx diff --git a/apps/web/src/test/utils/renderWithProviders.test.tsx b/apps/web/src/test/utils/renderWithProviders.test.tsx new file mode 100644 index 0000000..dc61e2d --- /dev/null +++ b/apps/web/src/test/utils/renderWithProviders.test.tsx @@ -0,0 +1,26 @@ +import { describe, it, expect } from 'vitest'; +import { screen } from '@testing-library/react'; +import { renderWithProviders } from './renderWithProviders'; + +function DummyPage() { + return
Hello Test
; +} + +describe('renderWithProviders', () => { + it('renders child component', () => { + renderWithProviders(); + expect(screen.getByTestId('dummy')).toHaveTextContent('Hello Test'); + }); + + it('wraps with MemoryRouter — Link renders without error', () => { + function PageWithLink() { + return ( +
+ Go +
+ ); + } + renderWithProviders(); + expect(screen.getByText('Go')).toHaveAttribute('href', '/test'); + }); +}); diff --git a/apps/web/src/test/utils/renderWithProviders.tsx b/apps/web/src/test/utils/renderWithProviders.tsx new file mode 100644 index 0000000..0fc6d3c --- /dev/null +++ b/apps/web/src/test/utils/renderWithProviders.tsx @@ -0,0 +1,25 @@ +import { ReactElement } from 'react'; +import { render, RenderOptions } from '@testing-library/react'; +import { MemoryRouter } from 'react-router-dom'; +import { ConfigProvider } from 'antd'; +import zhCN from 'antd/locale/zh_CN'; + +interface CustomRenderOptions extends Omit { + route?: string; +} + +export function renderWithProviders(ui: ReactElement, options: CustomRenderOptions = {}) { + const { route = '/', ...renderOptions } = options; + + function Wrapper({ children }: { children: React.ReactNode }) { + return ( + + {children} + + ); + } + + return render(ui, { wrapper: Wrapper, ...renderOptions }); +} + +export * from '@testing-library/react';