integration-test-db.test.ts 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import { describe, it, expect, beforeEach, afterEach } from 'vitest';
  2. import { IntegrationTestDatabase } from '../../src/integration-test-db';
  3. // 模拟实体用于测试
  4. class MockEntity {
  5. id?: number;
  6. name?: string;
  7. }
  8. describe('IntegrationTestDatabase', () => {
  9. beforeEach(async () => {
  10. // 确保数据库已清理
  11. await IntegrationTestDatabase.cleanup();
  12. });
  13. afterEach(async () => {
  14. // 清理测试数据库
  15. await IntegrationTestDatabase.cleanup();
  16. });
  17. describe('getDataSource', () => {
  18. it('应该返回数据源实例', async () => {
  19. const dataSource = await IntegrationTestDatabase.getDataSource();
  20. expect(dataSource).toBeDefined();
  21. expect(dataSource.isInitialized).toBe(true);
  22. });
  23. it('应该重用已初始化的数据源', async () => {
  24. const dataSource1 = await IntegrationTestDatabase.getDataSource();
  25. const dataSource2 = await IntegrationTestDatabase.getDataSource();
  26. expect(dataSource1).toBe(dataSource2);
  27. });
  28. });
  29. describe('cleanup', () => {
  30. it('应该清理数据源', async () => {
  31. // 先初始化数据源
  32. await IntegrationTestDatabase.getDataSource();
  33. // 然后清理
  34. await IntegrationTestDatabase.cleanup();
  35. // 验证数据源已销毁
  36. const dataSource = await IntegrationTestDatabase.getDataSource();
  37. expect(dataSource.isInitialized).toBe(true); // 重新初始化了
  38. });
  39. it('应该在数据源未初始化时安全清理', async () => {
  40. // 确保数据源未初始化
  41. await IntegrationTestDatabase.cleanup();
  42. // 清理未初始化的数据源应该不会抛出错误
  43. await expect(IntegrationTestDatabase.cleanup()).resolves.not.toThrow();
  44. });
  45. });
  46. describe('initializeWithEntities', () => {
  47. it('应该使用特定实体初始化数据源', async () => {
  48. const entities = [MockEntity];
  49. const dataSource = await IntegrationTestDatabase.initializeWithEntities(entities);
  50. expect(dataSource).toBeDefined();
  51. expect(dataSource.isInitialized).toBe(true);
  52. });
  53. });
  54. describe('createTestData', () => {
  55. it('应该创建测试数据', async () => {
  56. const dataSource = await IntegrationTestDatabase.getDataSource();
  57. // 注意:这里只是测试方法调用,实际数据库操作需要真实的实体
  58. // 在真实环境中,应该使用具体的实体类
  59. const testData = { name: 'test' };
  60. // 验证方法存在且可调用
  61. expect(IntegrationTestDatabase.createTestData).toBeDefined();
  62. expect(typeof IntegrationTestDatabase.createTestData).toBe('function');
  63. });
  64. });
  65. describe('findTestData', () => {
  66. it('应该查找测试数据', async () => {
  67. // 验证方法存在且可调用
  68. expect(IntegrationTestDatabase.findTestData).toBeDefined();
  69. expect(typeof IntegrationTestDatabase.findTestData).toBe('function');
  70. });
  71. });
  72. describe('deleteTestData', () => {
  73. it('应该删除测试数据', async () => {
  74. // 验证方法存在且可调用
  75. expect(IntegrationTestDatabase.deleteTestData).toBeDefined();
  76. expect(typeof IntegrationTestDatabase.deleteTestData).toBe('function');
  77. });
  78. });
  79. describe('cleanupTable', () => {
  80. it('应该清理表数据', async () => {
  81. // 验证方法存在且可调用
  82. expect(IntegrationTestDatabase.cleanupTable).toBeDefined();
  83. expect(typeof IntegrationTestDatabase.cleanupTable).toBe('function');
  84. });
  85. });
  86. });
  87. describe('setupIntegrationDatabaseHooks', () => {
  88. it('应该定义生命周期钩子函数', () => {
  89. const hooks = require('../../src/integration-test-db');
  90. expect(hooks.setupIntegrationDatabaseHooks).toBeDefined();
  91. expect(typeof hooks.setupIntegrationDatabaseHooks).toBe('function');
  92. expect(hooks.setupIntegrationDatabaseHooksWithEntities).toBeDefined();
  93. expect(typeof hooks.setupIntegrationDatabaseHooksWithEntities).toBe('function');
  94. });
  95. });