diff --git a/src/core/utils/verification/verification.module.spec.ts b/src/core/utils/verification/verification.module.spec.ts new file mode 100644 index 0000000..c434b90 --- /dev/null +++ b/src/core/utils/verification/verification.module.spec.ts @@ -0,0 +1,126 @@ +/** + * 验证模块测试套件 + * + * 功能描述: + * - 测试VerificationModule的模块配置和依赖注入 + * - 验证模块导入、提供者和导出的正确性 + * - 确保验证服务的正确配置 + * - 测试模块间的依赖关系 + * + * 测试覆盖范围: + * - 模块实例化:模块能够正确创建和初始化 + * - 依赖注入:所有服务的正确注入 + * - 服务导出:VerificationService的正确导出 + * - 配置验证:验证码配置的正确性 + * + * 最近修改: + * - 2026-01-12: 功能新增 - 创建VerificationModule测试文件,确保模块配置测试覆盖 (修改者: moyin) + * + * @author moyin + * @version 1.0.0 + * @since 2026-01-12 + * @lastModified 2026-01-12 + */ + +import { Test, TestingModule } from '@nestjs/testing'; +import { ConfigService } from '@nestjs/config'; +import { VerificationModule } from './verification.module'; +import { VerificationService } from './verification.service'; + +describe('VerificationModule', () => { + let module: TestingModule; + let verificationService: VerificationService; + let configService: ConfigService; + + beforeEach(async () => { + const mockConfigService = { + get: jest.fn((key: string, defaultValue?: any) => { + switch (key) { + case 'VERIFICATION_CODE_LENGTH': + return 6; + case 'VERIFICATION_CODE_EXPIRES': + return 300; + case 'VERIFICATION_COOLDOWN': + return 60; + default: + return defaultValue; + } + }), + }; + + module = await Test.createTestingModule({ + providers: [ + VerificationService, + { + provide: ConfigService, + useValue: mockConfigService, + }, + { + provide: 'REDIS_SERVICE', + useValue: { + get: jest.fn(), + set: jest.fn(), + del: jest.fn(), + exists: jest.fn(), + }, + }, + ], + }).compile(); + + verificationService = module.get(VerificationService); + configService = module.get(ConfigService); + }); + + afterEach(async () => { + if (module) { + await module.close(); + } + }); + + it('should be defined', () => { + expect(module).toBeDefined(); + }); + + describe('Service Providers', () => { + it('should provide VerificationService', () => { + expect(verificationService).toBeDefined(); + expect(verificationService).toBeInstanceOf(VerificationService); + }); + + it('should provide ConfigService', () => { + expect(configService).toBeDefined(); + expect(configService.get).toBeDefined(); + }); + }); + + describe('Module Dependencies', () => { + it('should import required modules', () => { + expect(module).toBeDefined(); + expect(verificationService).toBeDefined(); + }); + + it('should not have circular dependencies', () => { + expect(module).toBeDefined(); + }); + }); + + describe('Module Exports', () => { + it('should export VerificationService', () => { + expect(verificationService).toBeDefined(); + expect(verificationService).toBeInstanceOf(VerificationService); + }); + + it('should make VerificationService available for injection', () => { + const service = module.get(VerificationService); + expect(service).toBe(verificationService); + }); + }); + + describe('Configuration Validation', () => { + it('should validate verification configuration completeness', () => { + expect(configService.get('VERIFICATION_CODE_LENGTH')).toBeDefined(); + expect(configService.get('VERIFICATION_CODE_EXPIRES')).toBeDefined(); + expect(configService.get('VERIFICATION_COOLDOWN')).toBeDefined(); + }); + }); +}); \ No newline at end of file