Skip to main content
Glama
DaxianLee

Cocos Creator MCP Server Plugin

by DaxianLee
prefab-tools-test.ts7.63 kB
import { PrefabTools } from '../tools/prefab-tools'; // 预制体工具测试 export class PrefabToolsTest { private prefabTools: PrefabTools; constructor() { this.prefabTools = new PrefabTools(); } async runAllTests() { console.log('开始预制体工具测试...'); try { // 测试1: 获取工具列表 await this.testGetTools(); // 测试2: 获取预制体列表 await this.testGetPrefabList(); // 测试3: 测试预制体创建(模拟) await this.testCreatePrefab(); // 测试3.5: 测试预制体实例化(模拟) await this.testInstantiatePrefab(); // 测试4: 测试预制体验证 await this.testValidatePrefab(); console.log('所有测试完成!'); } catch (error) { console.error('测试过程中发生错误:', error); } } private async testGetTools() { console.log('测试1: 获取工具列表'); const tools = this.prefabTools.getTools(); console.log(`找到 ${tools.length} 个工具:`); tools.forEach(tool => { console.log(` - ${tool.name}: ${tool.description}`); }); console.log('测试1完成\n'); } private async testGetPrefabList() { console.log('测试2: 获取预制体列表'); try { const result = await this.prefabTools.execute('get_prefab_list', { folder: 'db://assets' }); if (result.success) { console.log(`找到 ${result.data?.length || 0} 个预制体`); if (result.data && result.data.length > 0) { result.data.slice(0, 3).forEach((prefab: any) => { console.log(` - ${prefab.name}: ${prefab.path}`); }); } } else { console.log('获取预制体列表失败:', result.error); } } catch (error) { console.log('获取预制体列表时发生错误:', error); } console.log('测试2完成\n'); } private async testCreatePrefab() { console.log('测试3: 测试预制体创建(模拟)'); try { // 模拟创建预制体 const mockArgs = { nodeUuid: 'mock-node-uuid', savePath: 'db://assets/test', prefabName: 'TestPrefab' }; const result = await this.prefabTools.execute('create_prefab', mockArgs); console.log('创建预制体结果:', result); } catch (error) { console.log('创建预制体时发生错误:', error); } console.log('测试3完成\n'); } private async testInstantiatePrefab() { console.log('测试3.5: 测试预制体实例化(模拟)'); try { // 模拟实例化预制体 const mockArgs = { prefabPath: 'db://assets/prefabs/TestPrefab.prefab', parentUuid: 'canvas-uuid', position: { x: 100, y: 200, z: 0 } }; const result = await this.prefabTools.execute('instantiate_prefab', mockArgs); console.log('实例化预制体结果:', result); // 测试API参数构建 this.testCreateNodeAPIParams(); } catch (error) { console.log('实例化预制体时发生错误:', error); } console.log('测试3.5完成\n'); } private testCreateNodeAPIParams() { console.log('测试 create-node API 参数构建...'); // 模拟 assetUuid const assetUuid = 'mock-prefab-uuid'; // 测试基本参数 const basicOptions = { assetUuid: assetUuid, name: 'TestPrefabInstance' }; console.log('基本参数:', basicOptions); // 测试带父节点的参数 const withParentOptions = { ...basicOptions, parent: 'parent-node-uuid' }; console.log('带父节点参数:', withParentOptions); // 测试带位置的参数 const withPositionOptions = { ...basicOptions, dump: { position: { x: 100, y: 200, z: 0 } } }; console.log('带位置参数:', withPositionOptions); // 测试完整参数 const fullOptions = { assetUuid: assetUuid, name: 'TestPrefabInstance', parent: 'parent-node-uuid', dump: { position: { x: 100, y: 200, z: 0 } }, keepWorldTransform: false, unlinkPrefab: false }; console.log('完整参数:', fullOptions); } private async testValidatePrefab() { console.log('测试4: 测试预制体验证'); try { // 测试验证一个不存在的预制体 const result = await this.prefabTools.execute('validate_prefab', { prefabPath: 'db://assets/nonexistent.prefab' }); console.log('验证预制体结果:', result); } catch (error) { console.log('验证预制体时发生错误:', error); } console.log('测试4完成\n'); } // 测试预制体数据结构生成 testPrefabDataGeneration() { console.log('测试预制体数据结构生成...'); const mockNodeData = { name: 'TestNode', position: { x: 0, y: 0, z: 0 }, scale: { x: 1, y: 1, z: 1 }, active: true, children: [], components: [ { type: 'cc.UITransform', enabled: true, properties: { _contentSize: { width: 100, height: 100 }, _anchorPoint: { x: 0.5, y: 0.5 } } } ] }; const prefabUuid = this.prefabTools['generateUUID'](); const prefabData = this.prefabTools['createPrefabData'](mockNodeData, 'TestPrefab', prefabUuid); console.log('生成的预制体数据结构:'); console.log(JSON.stringify(prefabData, null, 2)); // 验证数据结构 const validationResult = this.prefabTools['validatePrefabFormat'](prefabData); console.log('验证结果:', validationResult); console.log('预制体数据结构生成测试完成\n'); } // 测试UUID生成 testUUIDGeneration() { console.log('测试UUID生成...'); const uuids = []; for (let i = 0; i < 5; i++) { const uuid = this.prefabTools['generateUUID'](); uuids.push(uuid); console.log(`UUID ${i + 1}: ${uuid}`); } // 检查UUID格式 const uuidPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; const validUuids = uuids.filter(uuid => uuidPattern.test(uuid)); console.log(`UUID格式验证: ${validUuids.length}/${uuids.length} 个有效`); console.log('UUID生成测试完成\n'); } } // 如果直接运行此文件 if (typeof module !== 'undefined' && module.exports) { const test = new PrefabToolsTest(); test.runAllTests(); test.testPrefabDataGeneration(); test.testUUIDGeneration(); }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DaxianLee/cocos-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server