08ea5fbe98
添加用户管理视图、API和状态管理文件
189 lines
6.6 KiB
TypeScript
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');
|
|
});
|
|
});
|