bf2ebab9aa
- 创建 TestDataManager 单例类 - 支持创建用户、角色等测试数据 - 实现测试数据跟踪机制 - 支持自动清理测试数据 - 添加完整的单元测试(6个测试用例全部通过)
118 lines
3.5 KiB
TypeScript
118 lines
3.5 KiB
TypeScript
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
import { TestDataManager, getTestDataManager } from '../test-data-manager';
|
|
|
|
global.fetch = vi.fn();
|
|
|
|
describe('TestDataManager', () => {
|
|
let manager: TestDataManager;
|
|
|
|
beforeEach(() => {
|
|
manager = TestDataManager.getInstance();
|
|
manager.clearTracking();
|
|
vi.clearAllMocks();
|
|
});
|
|
|
|
it('should be a singleton', () => {
|
|
const instance1 = getTestDataManager();
|
|
const instance2 = getTestDataManager();
|
|
expect(instance1).toBe(instance2);
|
|
});
|
|
|
|
it('should create user and track it', async () => {
|
|
const mockUserId = 'user-123';
|
|
(global.fetch as any).mockResolvedValueOnce({
|
|
ok: true,
|
|
json: async () => ({ data: { id: mockUserId } })
|
|
});
|
|
|
|
const userData = {
|
|
username: 'testuser',
|
|
password: 'Test@123',
|
|
email: 'test@example.com',
|
|
};
|
|
|
|
const result = await manager.createUser(userData);
|
|
|
|
expect(result.id).toBe(mockUserId);
|
|
expect(result.type).toBe('user');
|
|
expect(result.data.username).toBe('testuser');
|
|
expect(manager.getCreatedData('user')).toHaveLength(1);
|
|
});
|
|
|
|
it('should create role and track it', async () => {
|
|
const mockRoleId = 'role-456';
|
|
(global.fetch as any).mockResolvedValueOnce({
|
|
ok: true,
|
|
json: async () => ({ data: { id: mockRoleId } })
|
|
});
|
|
|
|
const roleData = {
|
|
roleName: '测试角色',
|
|
roleKey: 'test_role',
|
|
};
|
|
|
|
const result = await manager.createRole(roleData);
|
|
|
|
expect(result.id).toBe(mockRoleId);
|
|
expect(result.type).toBe('role');
|
|
expect(manager.getCreatedData('role')).toHaveLength(1);
|
|
});
|
|
|
|
it('should cleanup created data', async () => {
|
|
(global.fetch as any)
|
|
.mockResolvedValueOnce({
|
|
ok: true,
|
|
json: async () => ({ data: { id: 'user-1' } })
|
|
})
|
|
.mockResolvedValueOnce({
|
|
ok: true,
|
|
json: async () => ({ data: { id: 'user-2' } })
|
|
})
|
|
.mockResolvedValueOnce({ ok: true })
|
|
.mockResolvedValueOnce({ ok: true });
|
|
|
|
await manager.createUser({ username: 'user1', password: 'Test@123', email: 'user1@test.com' });
|
|
await manager.createUser({ username: 'user2', password: 'Test@123', email: 'user2@test.com' });
|
|
|
|
expect(manager.getCreatedData('user')).toHaveLength(2);
|
|
|
|
await manager.cleanup('user');
|
|
|
|
expect(manager.getCreatedData('user')).toHaveLength(0);
|
|
expect(global.fetch).toHaveBeenCalledTimes(4); // 2 creates + 2 deletes
|
|
});
|
|
|
|
it('should cleanup all data types when no type specified', async () => {
|
|
(global.fetch as any)
|
|
.mockResolvedValueOnce({
|
|
ok: true,
|
|
json: async () => ({ data: { id: 'user-1' } })
|
|
})
|
|
.mockResolvedValueOnce({
|
|
ok: true,
|
|
json: async () => ({ data: { id: 'role-1' } })
|
|
})
|
|
.mockResolvedValueOnce({ ok: true })
|
|
.mockResolvedValueOnce({ ok: true });
|
|
|
|
await manager.createUser({ username: 'user1', password: 'Test@123', email: 'user1@test.com' });
|
|
await manager.createRole({ roleName: '角色1', roleKey: 'role1' });
|
|
|
|
await manager.cleanup();
|
|
|
|
expect(manager.getCreatedData('user')).toHaveLength(0);
|
|
expect(manager.getCreatedData('role')).toHaveLength(0);
|
|
});
|
|
|
|
it('should throw error on creation failure', async () => {
|
|
(global.fetch as any).mockResolvedValueOnce({
|
|
ok: false,
|
|
statusText: 'Bad Request'
|
|
});
|
|
|
|
await expect(
|
|
manager.createUser({ username: 'test', password: 'Test@123', email: 'test@test.com' })
|
|
).rejects.toThrow('Failed to create user');
|
|
});
|
|
});
|