|
@@ -18,24 +18,71 @@ vi.mock('sonner', () => ({
|
|
|
},
|
|
},
|
|
|
}));
|
|
}));
|
|
|
|
|
|
|
|
-// Mock shared UI components - 简化mock避免复杂渲染问题
|
|
|
|
|
|
|
+// Mock shared UI components - 使用data-testid策略
|
|
|
vi.mock('@d8d/shared-ui-components', () => ({
|
|
vi.mock('@d8d/shared-ui-components', () => ({
|
|
|
- Button: ({ children, ...props }: any) => React.createElement('button', { ...props, 'data-testid': 'button' }, children),
|
|
|
|
|
- Card: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'card' }, children),
|
|
|
|
|
- CardContent: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'card-content' }, children),
|
|
|
|
|
- CardDescription: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'card-description' }, children),
|
|
|
|
|
- CardFooter: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'card-footer' }, children),
|
|
|
|
|
- CardHeader: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'card-header' }, children),
|
|
|
|
|
- CardTitle: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'card-title' }, children),
|
|
|
|
|
- Form: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'form' }, children),
|
|
|
|
|
- FormControl: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'form-control' }, children),
|
|
|
|
|
- FormField: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'form-field' }, children),
|
|
|
|
|
- FormItem: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'form-item' }, children),
|
|
|
|
|
- FormLabel: ({ children, ...props }: any) => React.createElement('label', { ...props, 'data-testid': 'form-label' }, children),
|
|
|
|
|
- FormMessage: ({ children, ...props }: any) => React.createElement('div', { ...props, 'data-testid': 'form-message' }, children),
|
|
|
|
|
- Input: ({ ...props }: any) => React.createElement('input', { ...props, 'data-testid': 'input' }),
|
|
|
|
|
|
|
+ Button: ({ children, ...props }: any) => {
|
|
|
|
|
+ const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
|
|
|
|
|
+ return React.createElement('button', { ...safeProps, 'data-testid': 'button' }, children);
|
|
|
|
|
+ },
|
|
|
|
|
+ Card: ({ children, ...props }: any) => {
|
|
|
|
|
+ const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
|
|
|
|
|
+ return React.createElement('div', { ...safeProps, 'data-testid': 'card' }, children);
|
|
|
|
|
+ },
|
|
|
|
|
+ CardContent: ({ children, ...props }: any) => {
|
|
|
|
|
+ const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
|
|
|
|
|
+ return React.createElement('div', { ...safeProps, 'data-testid': 'card-content' }, children);
|
|
|
|
|
+ },
|
|
|
|
|
+ CardDescription: ({ children, ...props }: any) => {
|
|
|
|
|
+ const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
|
|
|
|
|
+ return React.createElement('div', { ...safeProps, 'data-testid': 'card-description' }, children);
|
|
|
|
|
+ },
|
|
|
|
|
+ CardFooter: ({ children, ...props }: any) => {
|
|
|
|
|
+ const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
|
|
|
|
|
+ return React.createElement('div', { ...safeProps, 'data-testid': 'card-footer' }, children);
|
|
|
|
|
+ },
|
|
|
|
|
+ CardHeader: ({ children, ...props }: any) => {
|
|
|
|
|
+ const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
|
|
|
|
|
+ return React.createElement('div', { ...safeProps, 'data-testid': 'card-header' }, children);
|
|
|
|
|
+ },
|
|
|
|
|
+ CardTitle: ({ children, ...props }: any) => {
|
|
|
|
|
+ const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
|
|
|
|
|
+ return React.createElement('div', { ...safeProps, 'data-testid': 'card-title' }, children);
|
|
|
|
|
+ },
|
|
|
|
|
+ Form: ({ children, ...props }: any) => {
|
|
|
|
|
+ const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
|
|
|
|
|
+ return React.createElement('div', { ...safeProps, 'data-testid': 'form' }, children);
|
|
|
|
|
+ },
|
|
|
|
|
+ FormControl: ({ children, ...props }: any) => {
|
|
|
|
|
+ const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
|
|
|
|
|
+ return React.createElement('div', { ...safeProps, 'data-testid': 'form-control' }, children);
|
|
|
|
|
+ },
|
|
|
|
|
+ FormField: ({ children, ...props }: any) => {
|
|
|
|
|
+ const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
|
|
|
|
|
+ // FormField有一个render函数,需要处理
|
|
|
|
|
+ if (props.render) {
|
|
|
|
|
+ return props.render({ field: {} });
|
|
|
|
|
+ }
|
|
|
|
|
+ return React.createElement('div', { ...safeProps, 'data-testid': 'form-field', name: props.name }, children);
|
|
|
|
|
+ },
|
|
|
|
|
+ FormItem: ({ children, ...props }: any) => {
|
|
|
|
|
+ const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
|
|
|
|
|
+ return React.createElement('div', { ...safeProps, 'data-testid': 'form-item' }, children);
|
|
|
|
|
+ },
|
|
|
|
|
+ FormLabel: ({ children, ...props }: any) => {
|
|
|
|
|
+ const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
|
|
|
|
|
+ return React.createElement('label', { ...safeProps, 'data-testid': 'form-label' }, children);
|
|
|
|
|
+ },
|
|
|
|
|
+ FormMessage: ({ children, ...props }: any) => {
|
|
|
|
|
+ const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
|
|
|
|
|
+ return React.createElement('div', { ...safeProps, 'data-testid': 'form-message' }, children);
|
|
|
|
|
+ },
|
|
|
|
|
+ Input: ({ ...props }: any) => {
|
|
|
|
|
+ const { render, handleSubmit, setValue, getValues, resetField, clearErrors, setError, setFocus, getFieldState, formState, subscribe, trigger, register, watch, reset, unregister, ...safeProps } = props;
|
|
|
|
|
+ return React.createElement('input', { ...safeProps, 'data-testid': 'input' });
|
|
|
|
|
+ },
|
|
|
}));
|
|
}));
|
|
|
|
|
|
|
|
|
|
+
|
|
|
describe('LoginPage', () => {
|
|
describe('LoginPage', () => {
|
|
|
beforeEach(() => {
|
|
beforeEach(() => {
|
|
|
vi.clearAllMocks();
|
|
vi.clearAllMocks();
|