renderLogin.tsx
1.14 KB
// REQ-USR-004: LoginPage 组件测试共享渲染工具(Provider + Router + AntD App 上下文)
import type { ReactElement } from 'react';
import { render } from '@testing-library/react';
import { Provider } from 'react-redux';
import { MemoryRouter } from 'react-router-dom';
import { App as AntdApp, ConfigProvider } from 'antd';
import { configureStore } from '@reduxjs/toolkit';
import authReducer from '../../src/store/slices/authSlice';
import type { RootState } from '../../src/store/store';
export function makeStore() {
return configureStore({ reducer: { auth: authReducer } });
}
export function renderWithProviders(
ui: ReactElement,
options?: { store?: ReturnType<typeof makeStore>; initialEntries?: string[] },
) {
const store = options?.store ?? makeStore();
const result = render(
<Provider store={store}>
<ConfigProvider>
<AntdApp>
<MemoryRouter initialEntries={options?.initialEntries ?? ['/login']}>
{ui}
</MemoryRouter>
</AntdApp>
</ConfigProvider>
</Provider>,
);
return {
...result,
store,
getState: () => store.getState() as RootState,
};
}