# 采购付款分离改造测试计划 ## 问题分析 当前系统存在以下问题: 1. 获取采购订单列表失败 2. 获取付款计划列表失败 3. 库存管理列表失败 ## 测试目标 采用红/绿 TDD 法修复以上问题,确保采购付款分离改造方案的需求能够实现。 ## 测试流程 ### 阶段1:环境准备 1. **检查数据库连接** - 验证SQLite数据库文件是否存在 - 验证数据库表结构是否完整 2. **检查后端服务器** - 验证后端服务器是否可以正常启动 - 验证API端点是否正确配置 ### 阶段2:红阶段(识别失败) 1. **测试采购订单API** - 测试 GET /api/purchase-orders - 测试 POST /api/purchase-orders - 测试 GET /api/purchase-orders/:id 2. **测试付款计划API** - 测试 GET /api/payment-plans - 测试 POST /api/payment-plans - 测试 GET /api/payment-plans/:id - 测试 PUT /api/payment-plans/:id 3. **测试库存管理API** - 测试 GET /api/inventory - 测试 GET /api/inventory/summary - 测试 POST /api/inventory/out ### 阶段3:绿阶段(修复问题) 1. **修复数据库表结构** - 确保所有必要的表都已创建 - 确保表结构正确 2. **修复API端点** - 确保API端点正确实现 - 确保数据库查询正确 3. **修复前端连接** - 确保前端正确调用API端点 - 确保数据格式正确 ### 阶段4:验证测试 1. **端到端测试** - 测试完整的采购付款流程 - 测试库存管理流程 2. **性能测试** - 测试API响应时间 - 测试数据处理能力 ## 测试脚本 ### 1. 数据库表结构检查脚本 ```javascript const sqlite3 = require('sqlite3').verbose(); const path = require('path'); const dbPath = path.join(__dirname, 'company_finance.db'); const db = new sqlite3.Database(dbPath, (err) => { if (err) { console.error('数据库连接失败:', err.message); process.exit(1); } else { console.log('数据库连接成功'); checkTables(); } }); function checkTables() { console.log('正在检查数据库表结构...'); const tables = [ 'purchase_orders', 'purchase_order_items', 'payment_plans', 'inventory_records' ]; let checked = 0; tables.forEach(table => { db.get(`SELECT name FROM sqlite_master WHERE type='table' AND name='${table}'`, (err, row) => { checked++; if (err) { console.error(`检查表 ${table} 失败:`, err.message); } else if (row) { console.log(`✅ 表 ${table} 存在`); } else { console.log(`❌ 表 ${table} 不存在`); } if (checked === tables.length) { console.log('检查完成'); db.close(); } }); }); } ``` ### 2. API端点测试脚本 ```javascript const http = require('http'); const options = { hostname: 'localhost', port: 3002, timeout: 5000 }; function testApi(endpoint, method = 'GET', data = null) { return new Promise((resolve, reject) => { const reqOptions = { ...options, path: endpoint, method, headers: { 'Content-Type': 'application/json' } }; const req = http.request(reqOptions, (res) => { let data = ''; res.on('data', (chunk) => { data += chunk; }); res.on('end', () => { try { const result = JSON.parse(data); resolve({ status: res.statusCode, data: result }); } catch (error) { resolve({ status: res.statusCode, data: data }); } }); }); req.on('error', (error) => { reject(error); }); req.on('timeout', () => { req.destroy(); reject(new Error('请求超时')); }); if (data) { req.write(JSON.stringify(data)); } req.end(); }); } async function runTests() { console.log('开始测试API端点...'); try { // 测试采购订单API console.log('\n测试采购订单API:'); const purchaseOrders = await testApi('/api/purchase-orders'); console.log('GET /api/purchase-orders:', purchaseOrders.status); console.log('响应:', purchaseOrders.data); // 测试付款计划API console.log('\n测试付款计划API:'); const paymentPlans = await testApi('/api/payment-plans'); console.log('GET /api/payment-plans:', paymentPlans.status); console.log('响应:', paymentPlans.data); // 测试库存管理API console.log('\n测试库存管理API:'); const inventory = await testApi('/api/inventory'); console.log('GET /api/inventory:', inventory.status); console.log('响应:', inventory.data); console.log('\n测试完成'); } catch (error) { console.error('测试失败:', error.message); } } runTests(); ``` ## 预期结果 1. **数据库表结构检查** - 所有必要的表都应该存在 - 表结构应该正确 2. **API端点测试** - 所有API端点应该返回 200 状态码 - 响应数据应该符合预期格式 3. **端到端测试** - 采购订单创建、查看、编辑功能正常 - 付款计划创建、查看、编辑功能正常 - 库存管理功能正常 ## 修复策略 1. **数据库表缺失** - 运行 db-sqlite.js 初始化数据库 - 确保所有必要的表都已创建 2. **API端点错误** - 检查 final-backend.js 中的API实现 - 确保数据库查询正确 3. **前端连接问题** - 检查前端API配置 - 确保前端正确调用API端点 ## 测试环境 - 后端服务器:http://localhost:3002 - 前端服务器:http://localhost:3006 - 数据库:SQLite (company_finance.db) ## 测试工具 - Node.js 14+ - SQLite3 - HTTP 客户端 - 浏览器