Skip to content

Commit 5b5f270

Browse files
committed
tests: 迁移 protable rakLocale 和 request-exception
1 parent 65e692e commit 5b5f270

5 files changed

Lines changed: 237 additions & 441 deletions

File tree

Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
import { describe, expect, test, vi } from 'vitest';
2+
import SettingProvider from 'react-admin-kit/SettingProvider';
3+
import ProTable from 'react-admin-kit/ProTable';
4+
import { render } from 'vitest-browser-react';
5+
6+
// 测试用的英文 locale
7+
const enLocale = {
8+
tableTitleAfter: ' List',
9+
formTypeNew: 'New',
10+
formTypeEdit: 'Edit',
11+
formTypeRead: 'View',
12+
exportFilename: 'Export List',
13+
delBtnText: 'Delete',
14+
delPopconfirmTitle: 'Are you sure to delete?',
15+
delModalConfirmTitle: 'Confirm',
16+
delModalConfirmContent: 'Are you sure to delete?',
17+
delSuccessContent: 'Deleted successfully',
18+
alertDelBtnText: 'Batch Delete',
19+
alertDelPopconfirmTitle: (rowKeys) =>
20+
`Are you sure to delete ${rowKeys.length} items?`,
21+
alertDelModalConfirmTitle: 'Confirm',
22+
alertDelModalConfirmContent: (rowKeys) =>
23+
`Are you sure to delete ${rowKeys.length} items?`,
24+
confirmOnCloseTitle: 'Confirm Close',
25+
confirmOnCloseContent: 'Form content not saved, are you sure to close?',
26+
};
27+
28+
// 测试用的中文 locale
29+
const zhLocale = {
30+
tableTitleAfter: '列表',
31+
formTypeNew: '新增',
32+
formTypeEdit: '编辑',
33+
formTypeRead: '查看',
34+
exportFilename: '导出列表',
35+
delBtnText: '删除',
36+
delPopconfirmTitle: '确认删除吗?',
37+
delModalConfirmTitle: '操作确认',
38+
delModalConfirmContent: '确认删除吗?',
39+
delSuccessContent: '删除成功',
40+
alertDelBtnText: '批量删除',
41+
alertDelPopconfirmTitle: (rowKeys) => `确认删除${rowKeys.length}条数据吗?`,
42+
alertDelModalConfirmTitle: '操作确认',
43+
alertDelModalConfirmContent: (rowKeys) =>
44+
`确认删除${rowKeys.length}条数据吗?`,
45+
confirmOnCloseTitle: '确认关闭',
46+
confirmOnCloseContent: '表单项内容未保存, 是否确认关闭?',
47+
};
48+
49+
// 自定义测试 locale
50+
const customLocale = {
51+
tableTitleAfter: ' Custom',
52+
formTypeNew: 'Create',
53+
formTypeEdit: 'Modify',
54+
formTypeRead: 'Read',
55+
delBtnText: 'MyDelete',
56+
};
57+
58+
// Mock columns
59+
const mockColumns: any = [
60+
{
61+
title: 'Name',
62+
dataIndex: 'name',
63+
valueType: 'text',
64+
},
65+
{
66+
title: 'Age',
67+
dataIndex: 'age',
68+
valueType: 'text',
69+
},
70+
{
71+
title: 'option',
72+
valueType: 'option',
73+
enableDelete: true,
74+
render: () => [],
75+
},
76+
];
77+
78+
// Mock request function
79+
const mockRequest = () =>
80+
Promise.resolve({
81+
data: [
82+
{ id: 1, name: 'John', age: 30 },
83+
{ id: 2, name: 'Jane', age: 25 },
84+
],
85+
success: true,
86+
total: 2,
87+
});
88+
89+
const mockDelete = vi.fn(() =>
90+
Promise.resolve({
91+
success: true,
92+
}),
93+
);
94+
95+
describe('ProTable rakLocale priority tests', () => {
96+
test('应该在全局为中文 locale 时,使用组件级的英文 locale', async () => {
97+
const Wrapper = ({ children }) => (
98+
<SettingProvider locale={zhLocale}>{children}</SettingProvider>
99+
);
100+
101+
const { getByText } = await render(
102+
<Wrapper>
103+
<ProTable
104+
search={false}
105+
name="User"
106+
columns={mockColumns}
107+
request={mockRequest}
108+
rakLocale={enLocale}
109+
rowKey="id"
110+
delFunction={mockDelete}
111+
/>
112+
</Wrapper>,
113+
);
114+
115+
// 验证使用了英文 locale 的 tableTitleAfter
116+
await expect(getByText('User List')).toBeInTheDocument();
117+
118+
await new Promise((resolve) => setTimeout(resolve, 100));
119+
120+
// 验证使用了英文 locale 的 delBtnText
121+
await expect(getByText('Delete').length).toBeGreaterThan(0);
122+
});
123+
124+
test('应该在全局为英文 locale 时,使用组件级的自定义 locale', async () => {
125+
const Wrapper = ({ children }) => (
126+
<SettingProvider locale={enLocale}>{children}</SettingProvider>
127+
);
128+
129+
const { getByText } = await render(
130+
<Wrapper>
131+
<ProTable
132+
name="User"
133+
columns={mockColumns}
134+
request={mockRequest}
135+
delFunction={mockDelete}
136+
rakLocale={customLocale}
137+
rowKey="id"
138+
/>
139+
</Wrapper>,
140+
);
141+
142+
// 验证使用了自定义 locale 的 tableTitleAfter
143+
await expect(getByText('User Custom')).toBeInTheDocument();
144+
145+
await new Promise((resolve) => setTimeout(resolve, 100));
146+
147+
await expect(getByText('MyDelete').length).toBeGreaterThan(0);
148+
});
149+
});
150+
151+
describe('场景2: 仅使用全局 locale(无组件级 rakLocale)', () => {
152+
test('应该使用全局中文 locale', async () => {
153+
const Wrapper = ({ children }) => (
154+
<SettingProvider locale={zhLocale}>{children}</SettingProvider>
155+
);
156+
157+
const { getByText } = await render(
158+
<Wrapper>
159+
<ProTable
160+
name="User"
161+
columns={mockColumns}
162+
request={mockRequest}
163+
rowKey="id"
164+
/>
165+
</Wrapper>,
166+
);
167+
168+
// 验证使用了全局中文 locale
169+
await expect(getByText('User列表')).toBeInTheDocument();
170+
});
171+
});
172+
173+
describe('场景4: 既无全局 locale 也无组件级 rakLocale', () => {
174+
test('应该使用默认中文 locale (zhCN)', async () => {
175+
const Wrapper = ({ children }) => (
176+
<SettingProvider>{children}</SettingProvider>
177+
);
178+
179+
const { getByText } = await render(
180+
<Wrapper>
181+
<ProTable
182+
name="User"
183+
columns={mockColumns}
184+
request={mockRequest}
185+
rowKey="id"
186+
/>
187+
</Wrapper>,
188+
);
189+
190+
// 验证使用了默认中文 locale
191+
await expect(getByText('User列表')).toBeInTheDocument();
192+
});
193+
});
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { describe, expect, test, vi } from 'vitest';
2+
import ProTable from 'react-admin-kit/ProTable';
3+
import { render } from 'vitest-browser-react';
4+
5+
describe('ProTable request 异常处理测试', () => {
6+
const mockColumns = [{ title: 'Title' }];
7+
8+
test('request 函数抛出异常时应正确处理', async () => {
9+
const mockRequest = vi.fn(() => Promise.reject(new Error('Network error')));
10+
11+
const { getByText } = await render(
12+
<ProTable columns={mockColumns} request={mockRequest} />,
13+
);
14+
15+
expect(getByText('暂无数据')).toHaveLength(2);
16+
});
17+
18+
test('request 函数同步抛出异常时应正确处理', async () => {
19+
const mockRequest = vi.fn(() => {
20+
throw new Error('Synchronous error');
21+
});
22+
23+
const { getByText } = await render(
24+
<ProTable columns={mockColumns} request={mockRequest} />,
25+
);
26+
27+
expect(getByText('暂无数据')).toHaveLength(2);
28+
});
29+
30+
test('request 函数返回 rejected promise 时应正确处理', async () => {
31+
const mockRequest = vi.fn(() =>
32+
Promise.reject({
33+
message: 'API error',
34+
status: 500,
35+
}),
36+
);
37+
38+
const { getByText } = await render(
39+
<ProTable columns={mockColumns} request={mockRequest} />,
40+
);
41+
42+
expect(getByText('暂无数据')).toHaveLength(2);
43+
});
44+
});

0 commit comments

Comments
 (0)