|
|
@@ -148,6 +148,155 @@ describe('薪资管理API集成测试', () => {
|
|
|
expect(response.status).toBe(400);
|
|
|
});
|
|
|
|
|
|
+ it('应该验证中文错误消息 - 缺少必填字段', async () => {
|
|
|
+ const createData = {
|
|
|
+ provinceId: null, // 发送null而不是省略
|
|
|
+ cityId: null, // 发送null而不是省略
|
|
|
+ basicSalary: 5000.00
|
|
|
+ };
|
|
|
+
|
|
|
+ const response = await client.create.$post({
|
|
|
+ json: createData
|
|
|
+ }, {
|
|
|
+ headers: {
|
|
|
+ 'Authorization': `Bearer ${testToken}`
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ 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('请选择城市');
|
|
|
+ });
|
|
|
+
|
|
|
+ it('应该验证中文错误消息 - 基本工资为0', async () => {
|
|
|
+ const createData = {
|
|
|
+ provinceId: testProvince.id,
|
|
|
+ cityId: testCity.id,
|
|
|
+ basicSalary: 0 // 基本工资为0,应该触发错误
|
|
|
+ };
|
|
|
+
|
|
|
+ const response = await client.create.$post({
|
|
|
+ json: createData
|
|
|
+ }, {
|
|
|
+ headers: {
|
|
|
+ 'Authorization': `Bearer ${testToken}`
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ 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');
|
|
|
+ });
|
|
|
+
|
|
|
+ it('应该验证中文错误消息 - 津贴补贴为负数', async () => {
|
|
|
+ const createData = {
|
|
|
+ provinceId: testProvince.id,
|
|
|
+ cityId: testCity.id,
|
|
|
+ basicSalary: 5000.00,
|
|
|
+ allowance: -100 // 津贴补贴为负数,应该触发错误
|
|
|
+ };
|
|
|
+
|
|
|
+ const response = await client.create.$post({
|
|
|
+ json: createData
|
|
|
+ }, {
|
|
|
+ headers: {
|
|
|
+ 'Authorization': `Bearer ${testToken}`
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ 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('津贴补贴不能为负数');
|
|
|
+ });
|
|
|
+
|
|
|
+ it('应该验证中文错误消息 - 类型转换错误', async () => {
|
|
|
+ const createData = {
|
|
|
+ provinceId: testProvince.id,
|
|
|
+ cityId: testCity.id,
|
|
|
+ basicSalary: '不是数字', // 字符串,应该触发类型转换错误
|
|
|
+ allowance: 100
|
|
|
+ };
|
|
|
+
|
|
|
+ const response = await client.create.$post({
|
|
|
+ json: createData
|
|
|
+ }, {
|
|
|
+ headers: {
|
|
|
+ 'Authorization': `Bearer ${testToken}`
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ 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');
|
|
|
+ });
|
|
|
+
|
|
|
it('应该验证区域唯一性约束', async () => {
|
|
|
// 第一次创建
|
|
|
const createData = {
|