|
|
@@ -150,8 +150,8 @@ describe('薪资管理API集成测试', () => {
|
|
|
|
|
|
it('应该验证中文错误消息 - 缺少必填字段', async () => {
|
|
|
const createData = {
|
|
|
- provinceId: null, // 发送null而不是省略
|
|
|
- cityId: null, // 发送null而不是省略
|
|
|
+ provinceId: 0, // 发送0而不是null
|
|
|
+ cityId: 0, // 发送0而不是null
|
|
|
basicSalary: 5000.00
|
|
|
};
|
|
|
|
|
|
@@ -164,25 +164,40 @@ describe('薪资管理API集成测试', () => {
|
|
|
});
|
|
|
|
|
|
expect(response.status).toBe(400);
|
|
|
- const errorData = await response.json();
|
|
|
- console.debug('缺少必填字段错误响应:', JSON.stringify(errorData, null, 2));
|
|
|
|
|
|
- // 验证错误响应格式
|
|
|
- expect(errorData).toHaveProperty('success');
|
|
|
- expect(errorData.success).toBe(false);
|
|
|
- expect(errorData).toHaveProperty('error');
|
|
|
- expect(errorData.error).toHaveProperty('name');
|
|
|
- expect(errorData.error.name).toBe('ZodError');
|
|
|
- expect(errorData.error).toHaveProperty('message');
|
|
|
-
|
|
|
- // 解析错误消息
|
|
|
- const errorMessages = JSON.parse(errorData.error.message);
|
|
|
- expect(Array.isArray(errorMessages)).toBe(true);
|
|
|
-
|
|
|
- // 验证具体的错误消息
|
|
|
- const errorTexts = errorMessages.map((err: any) => err.message);
|
|
|
- expect(errorTexts).toContain('请选择省份');
|
|
|
- expect(errorTexts).toContain('请选择城市');
|
|
|
+ if (response.status === 400) {
|
|
|
+ const errorData = await response.json() as any;
|
|
|
+ console.debug('缺少必填字段错误响应:', JSON.stringify(errorData, null, 2));
|
|
|
+
|
|
|
+ // 验证错误响应格式 - 根据实际响应调整
|
|
|
+ if ('success' in errorData) {
|
|
|
+ // 格式: { success: boolean; error: { name: string; message: string } }
|
|
|
+ expect(errorData.success).toBe(false);
|
|
|
+ expect(errorData.error).toHaveProperty('name');
|
|
|
+ expect(errorData.error.name).toBe('ZodError');
|
|
|
+ expect(errorData.error).toHaveProperty('message');
|
|
|
+
|
|
|
+ // 解析错误消息
|
|
|
+ const errorMessages = JSON.parse(errorData.error.message);
|
|
|
+ expect(Array.isArray(errorMessages)).toBe(true);
|
|
|
+
|
|
|
+ // 验证具体的错误消息
|
|
|
+ const errorTexts = errorMessages.map((err: any) => err.message);
|
|
|
+ expect(errorTexts).toContain('请选择省份');
|
|
|
+ expect(errorTexts).toContain('请选择城市');
|
|
|
+ } else {
|
|
|
+ // 格式: { code: number; message: string; errors?: any }
|
|
|
+ expect(errorData.code).toBe(400);
|
|
|
+ expect(errorData.message).toBe('参数错误');
|
|
|
+ expect(errorData).toHaveProperty('errors');
|
|
|
+ expect(Array.isArray(errorData.errors)).toBe(true);
|
|
|
+
|
|
|
+ // 验证具体的错误消息
|
|
|
+ const errorTexts = errorData.errors.map((err: any) => err.message);
|
|
|
+ expect(errorTexts).toContain('请选择省份');
|
|
|
+ expect(errorTexts).toContain('请选择城市');
|
|
|
+ }
|
|
|
+ }
|
|
|
});
|
|
|
|
|
|
it('应该验证中文错误消息 - 基本工资为0', async () => {
|
|
|
@@ -201,24 +216,39 @@ describe('薪资管理API集成测试', () => {
|
|
|
});
|
|
|
|
|
|
expect(response.status).toBe(400);
|
|
|
- const errorData = await response.json();
|
|
|
- console.debug('基本工资为0错误响应:', JSON.stringify(errorData, null, 2));
|
|
|
|
|
|
- // 验证错误响应格式
|
|
|
- expect(errorData).toHaveProperty('success');
|
|
|
- expect(errorData.success).toBe(false);
|
|
|
- expect(errorData).toHaveProperty('error');
|
|
|
- expect(errorData.error).toHaveProperty('name');
|
|
|
- expect(errorData.error.name).toBe('ZodError');
|
|
|
- expect(errorData.error).toHaveProperty('message');
|
|
|
-
|
|
|
- // 解析错误消息
|
|
|
- const errorMessages = JSON.parse(errorData.error.message);
|
|
|
- expect(Array.isArray(errorMessages)).toBe(true);
|
|
|
-
|
|
|
- // 验证具体的错误消息
|
|
|
- const errorTexts = errorMessages.map((err: any) => err.message);
|
|
|
- expect(errorTexts).toContain('基本工资必须大于0');
|
|
|
+ if (response.status === 400) {
|
|
|
+ const errorData = await response.json() as any;
|
|
|
+ console.debug('基本工资为0错误响应:', JSON.stringify(errorData, null, 2));
|
|
|
+
|
|
|
+ // 验证错误响应格式 - 支持两种格式
|
|
|
+ if (errorData.success !== undefined) {
|
|
|
+ // 格式: { success: false, error: { name: 'ZodError', message: '...' } }
|
|
|
+ expect(errorData.success).toBe(false);
|
|
|
+ expect(errorData).toHaveProperty('error');
|
|
|
+ expect(errorData.error).toHaveProperty('name');
|
|
|
+ expect(errorData.error.name).toBe('ZodError');
|
|
|
+ expect(errorData.error).toHaveProperty('message');
|
|
|
+
|
|
|
+ // 解析错误消息
|
|
|
+ const errorMessages = JSON.parse(errorData.error.message);
|
|
|
+ expect(Array.isArray(errorMessages)).toBe(true);
|
|
|
+
|
|
|
+ // 验证具体的错误消息
|
|
|
+ const errorTexts = errorMessages.map((err: any) => err.message);
|
|
|
+ expect(errorTexts).toContain('基本工资必须大于0');
|
|
|
+ } else {
|
|
|
+ // 格式: { code: number; message: string; errors?: any }
|
|
|
+ expect(errorData.code).toBe(400);
|
|
|
+ expect(errorData.message).toBe('参数错误');
|
|
|
+ expect(errorData).toHaveProperty('errors');
|
|
|
+ expect(Array.isArray(errorData.errors)).toBe(true);
|
|
|
+
|
|
|
+ // 验证具体的错误消息
|
|
|
+ const errorTexts = errorData.errors.map((err: any) => err.message);
|
|
|
+ expect(errorTexts).toContain('基本工资必须大于0');
|
|
|
+ }
|
|
|
+ }
|
|
|
});
|
|
|
|
|
|
it('应该验证中文错误消息 - 津贴补贴为负数', async () => {
|
|
|
@@ -238,31 +268,46 @@ describe('薪资管理API集成测试', () => {
|
|
|
});
|
|
|
|
|
|
expect(response.status).toBe(400);
|
|
|
- const errorData = await response.json();
|
|
|
- console.debug('津贴补贴为负数错误响应:', JSON.stringify(errorData, null, 2));
|
|
|
|
|
|
- // 验证错误响应格式
|
|
|
- expect(errorData).toHaveProperty('success');
|
|
|
- expect(errorData.success).toBe(false);
|
|
|
- expect(errorData).toHaveProperty('error');
|
|
|
- expect(errorData.error).toHaveProperty('name');
|
|
|
- expect(errorData.error.name).toBe('ZodError');
|
|
|
- expect(errorData.error).toHaveProperty('message');
|
|
|
-
|
|
|
- // 解析错误消息
|
|
|
- const errorMessages = JSON.parse(errorData.error.message);
|
|
|
- expect(Array.isArray(errorMessages)).toBe(true);
|
|
|
-
|
|
|
- // 验证具体的错误消息
|
|
|
- const errorTexts = errorMessages.map((err: any) => err.message);
|
|
|
- expect(errorTexts).toContain('津贴补贴不能为负数');
|
|
|
+ if (response.status === 400) {
|
|
|
+ const errorData = await response.json() as any;
|
|
|
+ console.debug('津贴补贴为负数错误响应:', JSON.stringify(errorData, null, 2));
|
|
|
+
|
|
|
+ // 验证错误响应格式 - 支持两种格式
|
|
|
+ if (errorData.success !== undefined) {
|
|
|
+ // 格式: { success: false, error: { name: 'ZodError', message: '...' } }
|
|
|
+ expect(errorData.success).toBe(false);
|
|
|
+ expect(errorData).toHaveProperty('error');
|
|
|
+ expect(errorData.error).toHaveProperty('name');
|
|
|
+ expect(errorData.error.name).toBe('ZodError');
|
|
|
+ expect(errorData.error).toHaveProperty('message');
|
|
|
+
|
|
|
+ // 解析错误消息
|
|
|
+ const errorMessages = JSON.parse(errorData.error.message);
|
|
|
+ expect(Array.isArray(errorMessages)).toBe(true);
|
|
|
+
|
|
|
+ // 验证具体的错误消息
|
|
|
+ const errorTexts = errorMessages.map((err: any) => err.message);
|
|
|
+ expect(errorTexts).toContain('津贴补贴不能为负数');
|
|
|
+ } else {
|
|
|
+ // 格式: { code: number; message: string; errors?: any }
|
|
|
+ expect(errorData.code).toBe(400);
|
|
|
+ expect(errorData.message).toBe('参数错误');
|
|
|
+ expect(errorData).toHaveProperty('errors');
|
|
|
+ expect(Array.isArray(errorData.errors)).toBe(true);
|
|
|
+
|
|
|
+ // 验证具体的错误消息
|
|
|
+ const errorTexts = errorData.errors.map((err: any) => err.message);
|
|
|
+ expect(errorTexts).toContain('津贴补贴不能为负数');
|
|
|
+ }
|
|
|
+ }
|
|
|
});
|
|
|
|
|
|
it('应该验证中文错误消息 - 类型转换错误', async () => {
|
|
|
const createData = {
|
|
|
provinceId: testProvince.id,
|
|
|
cityId: testCity.id,
|
|
|
- basicSalary: '不是数字', // 字符串,应该触发类型转换错误
|
|
|
+ basicSalary: '不是数字' as any, // 字符串,应该触发类型转换错误
|
|
|
allowance: 100
|
|
|
};
|
|
|
|
|
|
@@ -275,26 +320,42 @@ describe('薪资管理API集成测试', () => {
|
|
|
});
|
|
|
|
|
|
expect(response.status).toBe(400);
|
|
|
- const errorData = await response.json();
|
|
|
- console.debug('类型转换错误响应:', JSON.stringify(errorData, null, 2));
|
|
|
|
|
|
- // 验证错误响应格式
|
|
|
- expect(errorData).toHaveProperty('success');
|
|
|
- expect(errorData.success).toBe(false);
|
|
|
- expect(errorData).toHaveProperty('error');
|
|
|
- expect(errorData.error).toHaveProperty('name');
|
|
|
- expect(errorData.error.name).toBe('ZodError');
|
|
|
- expect(errorData.error).toHaveProperty('message');
|
|
|
-
|
|
|
- // 解析错误消息
|
|
|
- const errorMessages = JSON.parse(errorData.error.message);
|
|
|
- expect(Array.isArray(errorMessages)).toBe(true);
|
|
|
-
|
|
|
- // 验证具体的错误消息
|
|
|
- const errorTexts = errorMessages.map((err: any) => err.message);
|
|
|
- console.debug('类型转换错误消息:', errorTexts);
|
|
|
- // 类型转换错误显示我们设置的中文错误消息
|
|
|
- expect(errorTexts).toContain('基本工资必须大于0');
|
|
|
+ if (response.status === 400) {
|
|
|
+ const errorData = await response.json() as any;
|
|
|
+ console.debug('类型转换错误响应:', JSON.stringify(errorData, null, 2));
|
|
|
+
|
|
|
+ // 验证错误响应格式 - 支持两种格式
|
|
|
+ if (errorData.success !== undefined) {
|
|
|
+ // 格式: { success: false, error: { name: 'ZodError', message: '...' } }
|
|
|
+ expect(errorData.success).toBe(false);
|
|
|
+ expect(errorData).toHaveProperty('error');
|
|
|
+ expect(errorData.error).toHaveProperty('name');
|
|
|
+ expect(errorData.error.name).toBe('ZodError');
|
|
|
+ expect(errorData.error).toHaveProperty('message');
|
|
|
+
|
|
|
+ // 解析错误消息
|
|
|
+ const errorMessages = JSON.parse(errorData.error.message);
|
|
|
+ expect(Array.isArray(errorMessages)).toBe(true);
|
|
|
+
|
|
|
+ // 验证具体的错误消息
|
|
|
+ const errorTexts = errorMessages.map((err: any) => err.message);
|
|
|
+ console.debug('类型转换错误消息:', errorTexts);
|
|
|
+ // 类型转换错误显示我们设置的中文错误消息
|
|
|
+ expect(errorTexts).toContain('基本工资必须大于0');
|
|
|
+ } else {
|
|
|
+ // 格式: { code: number; message: string; errors?: any }
|
|
|
+ expect(errorData.code).toBe(400);
|
|
|
+ expect(errorData.message).toBe('参数错误');
|
|
|
+ expect(errorData).toHaveProperty('errors');
|
|
|
+ expect(Array.isArray(errorData.errors)).toBe(true);
|
|
|
+
|
|
|
+ // 验证具体的错误消息
|
|
|
+ const errorTexts = errorData.errors.map((err: any) => err.message);
|
|
|
+ console.debug('类型转换错误消息:', errorTexts);
|
|
|
+ expect(errorTexts).toContain('基本工资必须大于0');
|
|
|
+ }
|
|
|
+ }
|
|
|
});
|
|
|
|
|
|
it('应该验证区域唯一性约束', async () => {
|
|
|
@@ -380,8 +441,8 @@ describe('薪资管理API集成测试', () => {
|
|
|
it('应该支持按区域ID过滤', async () => {
|
|
|
const response = await client.list.$get({
|
|
|
query: {
|
|
|
- provinceId: testProvince.id.toString(),
|
|
|
- cityId: testCity.id.toString()
|
|
|
+ provinceId: testProvince.id,
|
|
|
+ cityId: testCity.id
|
|
|
}
|
|
|
}, {
|
|
|
headers: {
|
|
|
@@ -400,8 +461,8 @@ describe('薪资管理API集成测试', () => {
|
|
|
it('应该支持分页查询', async () => {
|
|
|
const response = await client.list.$get({
|
|
|
query: {
|
|
|
- skip: '0',
|
|
|
- take: '1'
|
|
|
+ skip: 0,
|
|
|
+ take: 1
|
|
|
}
|
|
|
}, {
|
|
|
headers: {
|
|
|
@@ -461,7 +522,7 @@ describe('薪资管理API集成测试', () => {
|
|
|
|
|
|
it('应该处理不存在的薪资ID', async () => {
|
|
|
const response = await client.detail[':id'].$get({
|
|
|
- param: { id: '999999' }
|
|
|
+ param: { id: 999999 }
|
|
|
}, {
|
|
|
headers: {
|
|
|
'Authorization': `Bearer ${testToken}`
|
|
|
@@ -495,8 +556,8 @@ describe('薪资管理API集成测试', () => {
|
|
|
it('应该按省份城市查询薪资', async () => {
|
|
|
const response = await client.byProvinceCity.$get({
|
|
|
query: {
|
|
|
- provinceId: testProvince.id.toString(),
|
|
|
- cityId: testCity.id.toString()
|
|
|
+ provinceId: testProvince.id,
|
|
|
+ cityId: testCity.id
|
|
|
}
|
|
|
}, {
|
|
|
headers: {
|
|
|
@@ -517,8 +578,8 @@ describe('薪资管理API集成测试', () => {
|
|
|
it('应该处理不存在的区域组合', async () => {
|
|
|
const response = await client.byProvinceCity.$get({
|
|
|
query: {
|
|
|
- provinceId: '999999',
|
|
|
- cityId: '999999'
|
|
|
+ provinceId: 999999,
|
|
|
+ cityId: 999999
|
|
|
}
|
|
|
}, {
|
|
|
headers: {
|
|
|
@@ -641,7 +702,7 @@ describe('薪资管理API集成测试', () => {
|
|
|
|
|
|
it('应该处理不存在的薪资ID', async () => {
|
|
|
const response = await client.delete[':id'].$delete({
|
|
|
- param: { id: '999999' }
|
|
|
+ param: { id: 999999 }
|
|
|
}, {
|
|
|
headers: {
|
|
|
'Authorization': `Bearer ${testToken}`
|