Files
everything-is-suitable/tests/smart-test-selector.test.ts
张翔 08ea5fbe98 feat(admin): 添加用户管理相关文件
添加用户管理视图、API和状态管理文件
2026-03-28 14:37:29 +08:00

189 lines
6.6 KiB
TypeScript

import { SmartTestSelector, TestSelectionResult } from '../scripts/smart-test-selector';
import { testMapping, moduleToTests } from '../config/test-mapping.config';
describe('SmartTestSelector', () => {
let selector: SmartTestSelector;
beforeEach(() => {
selector = new SmartTestSelector();
});
describe('selectTestsByChanges', () => {
it('应该正确选择用户管理模块的测试', () => {
const changedFiles = [
'everything-is-suitable-admin/src/views/UserManagement.vue',
];
const result = selector.selectTestsByChanges(changedFiles);
expect(result.selectedTests).toContain('e2e/user-management/*.spec.ts');
expect(result.affectedModules).toContain('user-management');
expect(result.changedFiles).toEqual(changedFiles);
});
it('应该正确选择API相关的测试', () => {
const changedFiles = [
'everything-is-suitable-admin/src/api/user.ts',
];
const result = selector.selectTestsByChanges(changedFiles);
expect(result.selectedTests).toContain('e2e/user-management/*.spec.ts');
expect(result.selectedTests).toContain('e2e/api/user-api.spec.ts');
expect(result.affectedModules).toContain('user-management');
expect(result.affectedModules).toContain('api');
});
it('应该正确处理多个变更文件', () => {
const changedFiles = [
'everything-is-suitable-admin/src/views/UserManagement.vue',
'everything-is-suitable-admin/src/api/user.ts',
'everything-is-suitable-admin/src/stores/user.ts',
];
const result = selector.selectTestsByChanges(changedFiles);
expect(result.selectedTests.length).toBeGreaterThan(0);
expect(result.affectedModules).toContain('user-management');
expect(result.affectedModules).toContain('api');
});
it('应该正确处理未映射的文件', () => {
const changedFiles = [
'everything-is-suitable-admin/src/views/UnknownFeature.vue',
];
const result = selector.selectTestsByChanges(changedFiles);
expect(result.selectedTests).toEqual([]);
expect(result.affectedModules).toEqual([]);
expect(result.analysisReport).toContain('变更文件');
});
it('应该正确过滤优先级', () => {
const changedFiles = [
'everything-is-suitable-admin/src/views/UserManagement.vue',
'everything-is-suitable-admin/src/views/RoleManagement.vue',
];
const result = selector.selectTestsByChanges(changedFiles, {
priority: 'high',
});
result.selectedTests.forEach(test => {
expect(test).toBeDefined();
});
});
it('应该正确处理关联分析', () => {
const changedFiles = [
'everything-is-suitable-admin/src/views/UserManagement.vue',
];
const resultWithRelated = selector.selectTestsByChanges(changedFiles, {
includeRelated: true,
});
const resultWithoutRelated = selector.selectTestsByChanges(changedFiles, {
includeRelated: false,
});
expect(resultWithRelated.selectedTests.length).toBeGreaterThanOrEqual(
resultWithoutRelated.selectedTests.length
);
});
});
describe('normalizePath', () => {
it('应该正确标准化路径', () => {
const selector = new SmartTestSelector();
expect((selector as any).normalizePath('src/views/Test.vue')).toBe('src/views/Test.vue');
expect((selector as any).normalizePath('./src/views/Test.vue')).toBe('src/views/Test.vue');
expect((selector as any).normalizePath('/absolute/path/Test.vue')).toBe('/absolute/path/Test.vue');
});
});
describe('findMapping', () => {
it('应该找到精确匹配的映射', () => {
const selector = new SmartTestSelector();
const mapping = (selector as any).findMapping('everything-is-suitable-admin/src/views/UserManagement.vue');
expect(mapping).toBeDefined();
expect(mapping.tests).toContain('e2e/user-management/*.spec.ts');
expect(mapping.priority).toBe('high');
expect(mapping.modules).toContain('user-management');
});
it('应该找到模糊匹配的映射', () => {
const selector = new SmartTestSelector();
const mapping = (selector as any).findMapping('everything-is-suitable-admin/src/api/new-api.ts');
expect(mapping).toBeDefined();
if (mapping) {
expect(mapping.tests).toBeDefined();
}
});
it('应该返回null当没有匹配时', () => {
const selector = new SmartTestSelector();
const mapping = (selector as any).findMapping('unknown/path/file.ts');
expect(mapping).toBeNull();
});
});
describe('addRelatedTests', () => {
it('应该添加相关模块的测试', () => {
const selector = new SmartTestSelector();
const selectedTests = new Set<string>();
const affectedModules = new Set<string>();
(selector as any).addRelatedTests(['user-management'], selectedTests, affectedModules);
expect(selectedTests.size).toBeGreaterThanOrEqual(0);
expect(affectedModules.size).toBeGreaterThanOrEqual(0);
});
});
describe('generateAnalysisReport', () => {
it('应该生成详细的分析报告', () => {
const selector = new SmartTestSelector();
const data = {
changedFiles: ['src/views/Test.vue'],
affectedModules: ['test-module'],
selectedTests: ['e2e/test.spec.ts'],
};
const report = (selector as any).generateAnalysisReport(data);
expect(report).toContain('变更文件');
expect(report).toContain('受影响模块');
expect(report).toContain('选中测试用例');
expect(report).toContain('执行建议');
});
});
});
describe('Test Mapping Configuration', () => {
it('应该包含用户管理模块的映射', () => {
expect(testMapping['everything-is-suitable-admin/src/views/UserManagement.vue']).toBeDefined();
expect(testMapping['everything-is-suitable-admin/src/views/UserManagement.vue'].priority).toBe('high');
});
it('应该包含角色管理模块的映射', () => {
expect(testMapping['everything-is-suitable-admin/src/views/RoleManagement.vue']).toBeDefined();
expect(testMapping['everything-is-suitable-admin/src/views/RoleManagement.vue'].priority).toBe('high');
});
it('应该包含API的映射', () => {
expect(testMapping['everything-is-suitable-admin/src/api/user.ts']).toBeDefined();
expect(testMapping['everything-is-suitable-admin/src/api/user.ts'].modules).toContain('api');
});
it('模块到测试的映射应该正确', () => {
expect(moduleToTests['user-management']).toBeDefined();
expect(moduleToTests['user-management']).toContain('e2e/user-management/*.spec.ts');
});
});