1
0

feat: 前端集成 Prettier 代码格式化

This commit is contained in:
2026-04-24 13:40:53 +08:00
parent 52007c9461
commit 365943e4c4
61 changed files with 1968 additions and 1698 deletions

View File

@@ -1,7 +1,7 @@
import { http, HttpResponse } from 'msw';
import { setupServer } from 'msw/node';
import { describe, it, expect, beforeAll, afterEach, afterAll } from 'vitest';
import { getStats } from '@/api/stats';
import { http, HttpResponse } from 'msw'
import { setupServer } from 'msw/node'
import { describe, it, expect, beforeAll, afterEach, afterAll } from 'vitest'
import { getStats } from '@/api/stats'
const mockStats = [
{
@@ -18,29 +18,29 @@ const mockStats = [
request_count: 50,
date: '2025-01-16',
},
];
]
describe('stats API', () => {
const server = setupServer();
const server = setupServer()
beforeAll(() => server.listen({ onUnhandledRequest: 'bypass' }));
afterEach(() => server.resetHandlers());
afterAll(() => server.close());
beforeAll(() => server.listen({ onUnhandledRequest: 'bypass' }))
afterEach(() => server.resetHandlers())
afterAll(() => server.close())
describe('getStats', () => {
it('calls /api/stats without params', async () => {
let receivedUrl: string | null = null;
let receivedUrl: string | null = null
server.use(
http.get('http://localhost:3000/api/stats', ({ request }) => {
receivedUrl = request.url;
return HttpResponse.json(mockStats);
}),
);
receivedUrl = request.url
return HttpResponse.json(mockStats)
})
)
const result = await getStats();
const result = await getStats()
expect(receivedUrl).toMatch(/\/api\/stats$/);
expect(receivedUrl).toMatch(/\/api\/stats$/)
expect(result).toEqual([
{
id: 1,
@@ -56,76 +56,76 @@ describe('stats API', () => {
requestCount: 50,
date: '2025-01-16',
},
]);
});
])
})
it('builds correct query string with snake_case keys when params are provided', async () => {
let receivedUrl: string | null = null;
let receivedUrl: string | null = null
server.use(
http.get('http://localhost:3000/api/stats', ({ request }) => {
receivedUrl = request.url;
return HttpResponse.json([]);
}),
);
receivedUrl = request.url
return HttpResponse.json([])
})
)
await getStats({
providerId: 'prov-1',
modelName: 'gpt-4',
startDate: '2025-01-01',
endDate: '2025-01-31',
});
})
expect(receivedUrl).toContain('provider_id=prov-1');
expect(receivedUrl).toContain('model_name=gpt-4');
expect(receivedUrl).toContain('start_date=2025-01-01');
expect(receivedUrl).toContain('end_date=2025-01-31');
});
expect(receivedUrl).toContain('provider_id=prov-1')
expect(receivedUrl).toContain('model_name=gpt-4')
expect(receivedUrl).toContain('start_date=2025-01-01')
expect(receivedUrl).toContain('end_date=2025-01-31')
})
it('omits undefined params from query string', async () => {
let receivedUrl: string | null = null;
let receivedUrl: string | null = null
server.use(
http.get('http://localhost:3000/api/stats', ({ request }) => {
receivedUrl = request.url;
return HttpResponse.json([]);
}),
);
receivedUrl = request.url
return HttpResponse.json([])
})
)
await getStats({
providerId: 'prov-1',
});
})
expect(receivedUrl).toContain('provider_id=prov-1');
expect(receivedUrl).not.toContain('model_name');
expect(receivedUrl).not.toContain('start_date');
expect(receivedUrl).not.toContain('end_date');
});
expect(receivedUrl).toContain('provider_id=prov-1')
expect(receivedUrl).not.toContain('model_name')
expect(receivedUrl).not.toContain('start_date')
expect(receivedUrl).not.toContain('end_date')
})
it('returns UsageStats array with camelCase keys', async () => {
server.use(
http.get('http://localhost:3000/api/stats', () => {
return HttpResponse.json(mockStats);
}),
);
return HttpResponse.json(mockStats)
})
)
const result = await getStats();
const result = await getStats()
expect(result).toHaveLength(2);
expect(result).toHaveLength(2)
expect(result[0]).toEqual({
id: 1,
providerId: 'prov-1',
modelName: 'gpt-4',
requestCount: 100,
date: '2025-01-15',
});
})
expect(result[1]).toEqual({
id: 2,
providerId: 'prov-2',
modelName: 'claude-3',
requestCount: 50,
date: '2025-01-16',
});
});
});
});
})
})
})
})