data-source.test.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import { describe, it, expect, beforeEach, afterEach } from 'vitest';
  2. import { createDataSource, initializeDataSource } from '../../src/data-source';
  3. // 模拟实体类
  4. class MockEntity {}
  5. describe('data-source', () => {
  6. const originalEnv = process.env;
  7. beforeEach(() => {
  8. // 重置环境变量
  9. process.env = { ...originalEnv };
  10. });
  11. afterEach(() => {
  12. process.env = originalEnv;
  13. });
  14. describe('createDataSource', () => {
  15. it('应该创建生产环境数据源', () => {
  16. process.env.NODE_ENV = 'production';
  17. const dataSource = createDataSource([MockEntity]);
  18. expect(dataSource).toBeDefined();
  19. expect(dataSource.options.type).toBe('postgres');
  20. expect(dataSource.options.entities).toEqual([MockEntity]);
  21. expect(dataSource.options.synchronize).toBe(true); // 默认值
  22. });
  23. it('应该创建测试环境数据源', () => {
  24. process.env.NODE_ENV = 'test';
  25. process.env.TEST_DATABASE_URL = 'postgresql://test:test@localhost:5432/test';
  26. const dataSource = createDataSource([MockEntity]);
  27. expect(dataSource).toBeDefined();
  28. expect(dataSource.options.type).toBe('postgres');
  29. expect(dataSource.options.url).toBe('postgresql://test:test@localhost:5432/test');
  30. expect(dataSource.options.synchronize).toBe(true);
  31. expect(dataSource.options.dropSchema).toBe(true);
  32. expect(dataSource.options.logging).toBe(false);
  33. });
  34. it('应该使用环境变量配置', () => {
  35. process.env.NODE_ENV = 'production';
  36. // 确保没有设置 TEST_DATABASE_URL,这样会使用生产环境配置
  37. delete process.env.TEST_DATABASE_URL;
  38. process.env.DB_HOST = 'custom-host';
  39. process.env.DB_PORT = '5433';
  40. process.env.DB_USERNAME = 'custom-user';
  41. process.env.DB_PASSWORD = 'custom-password';
  42. process.env.DB_DATABASE = 'custom-db';
  43. process.env.DB_SYNCHRONIZE = 'false';
  44. process.env.DB_LOGGING = 'true';
  45. const dataSource = createDataSource([MockEntity]);
  46. expect(dataSource.options).toMatchObject({
  47. host: 'custom-host',
  48. port: 5433,
  49. username: 'custom-user',
  50. password: 'custom-password',
  51. database: 'custom-db',
  52. synchronize: false,
  53. logging: true
  54. });
  55. });
  56. it('应该使用默认值当环境变量未设置时', () => {
  57. process.env.NODE_ENV = 'production';
  58. // 确保没有设置 TEST_DATABASE_URL,这样会使用生产环境配置
  59. delete process.env.TEST_DATABASE_URL;
  60. delete process.env.DB_HOST;
  61. delete process.env.DB_PORT;
  62. delete process.env.DB_USERNAME;
  63. delete process.env.DB_PASSWORD;
  64. delete process.env.DB_DATABASE;
  65. delete process.env.DB_SYNCHRONIZE;
  66. delete process.env.DB_LOGGING;
  67. const dataSource = createDataSource([MockEntity]);
  68. expect(dataSource.options).toMatchObject({
  69. host: 'localhost',
  70. port: 5432,
  71. username: 'postgres',
  72. password: '',
  73. database: 'postgres',
  74. synchronize: true,
  75. logging: false
  76. });
  77. });
  78. });
  79. describe('initializeDataSource', () => {
  80. it('应该初始化默认数据源', () => {
  81. process.env.NODE_ENV = 'production';
  82. initializeDataSource([MockEntity]);
  83. // 导入 AppDataSource 来验证它被正确设置
  84. import('../../src/data-source').then(({ AppDataSource }) => {
  85. expect(AppDataSource).toBeDefined();
  86. expect(AppDataSource.options.entities).toEqual([MockEntity]);
  87. });
  88. });
  89. });
  90. });