2
0

integration-test-db.test.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { describe, it, expect } from 'vitest';
  2. import { IntegrationTestDatabase, setupIntegrationDatabaseHooksWithEntities } from '../../src/integration-test-db';
  3. // 模拟实体用于测试
  4. class MockEntity {
  5. id?: number;
  6. name?: string;
  7. }
  8. // 设置集成测试钩子 - 这是关键步骤!
  9. setupIntegrationDatabaseHooksWithEntities([MockEntity])
  10. describe('IntegrationTestDatabase', () => {
  11. describe('getDataSource', () => {
  12. it('应该返回数据源实例', async () => {
  13. const dataSource = await IntegrationTestDatabase.getDataSource();
  14. expect(dataSource).toBeDefined();
  15. expect(dataSource.isInitialized).toBe(true);
  16. });
  17. it('应该重用已初始化的数据源', async () => {
  18. const dataSource1 = await IntegrationTestDatabase.getDataSource();
  19. const dataSource2 = await IntegrationTestDatabase.getDataSource();
  20. expect(dataSource1).toBe(dataSource2);
  21. });
  22. });
  23. describe('cleanup', () => {
  24. it('应该清理数据源', async () => {
  25. // 先初始化数据源
  26. await IntegrationTestDatabase.getDataSource();
  27. // 然后清理
  28. await IntegrationTestDatabase.cleanup();
  29. // 验证数据源已销毁
  30. const dataSource = await IntegrationTestDatabase.getDataSource();
  31. expect(dataSource.isInitialized).toBe(true); // 重新初始化了
  32. });
  33. it('应该在数据源未初始化时安全清理', async () => {
  34. // 确保数据源未初始化
  35. await IntegrationTestDatabase.cleanup();
  36. // 清理未初始化的数据源应该不会抛出错误
  37. await expect(IntegrationTestDatabase.cleanup()).resolves.not.toThrow();
  38. });
  39. });
  40. describe('initializeWithEntities', () => {
  41. it('应该使用特定实体初始化数据源', async () => {
  42. const entities = [MockEntity];
  43. const dataSource = await IntegrationTestDatabase.initializeWithEntities(entities);
  44. expect(dataSource).toBeDefined();
  45. expect(dataSource.isInitialized).toBe(true);
  46. });
  47. });
  48. });