# 模型参数配置 - 端到端测试

## 测试环境设置

### 1. 安装测试依赖

```bash
cd ruoyi-ui
npm install --save-dev @vue/test-utils@1.3.6 chai@4.3.7 sinon@15.2.0 mocha@10.2.0 @babel/register@7.22.15 nyc@15.1.0
```

### 2. 配置Babel (如果还没有)

创建 `babel.config.js`:
```javascript
module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset'
  ]
}
```

### 3. 创建测试启动文件

创建 `tests/setup.js`:
```javascript
import Vue from 'vue'
import ElementUI from 'element-ui'

Vue.use(ElementUI)

// 全局存根
Vue.prototype.$message = {
  success: console.log,
  error: console.error,
  info: console.info,
  warning: console.warn
}

Vue.prototype.$modal = {
  msgSuccess: console.log,
  msgError: console.error
}
```

---

## 运行测试

### 运行所有端到端测试
```bash
cd ruoyi-ui
npm run test:e2e
```

### 运行单个测试文件
```bash
cd ruoyi-ui
npx mocha tests/e2e/model-param-config.test.js --require @babel/register --timeout 10000
```

### 带覆盖率报告
```bash
cd ruoyi-ui
npm run test:e2e:coverage
```

---

## 测试用例说明

### 场景1: 页面加载和显示
- ✅ 显示加载状态
- ✅ 成功加载所有模型参数
- ✅ 显示空状态提示
- ✅ 显示错误信息

### 场景2: 参数修改追踪
- ✅ 追踪单个参数修改
- ✅ 追踪多个参数修改
- ✅ 正确计算修改数量

### 场景3: 保存功能
- ✅ 拒绝保存当无修改
- ✅ 成功保存修改
- ✅ 显示错误当保存失败
- ✅ 设置saving状态

### 场景4: 边界情况
- ✅ 处理空projectId
- ✅ 处理API异常数据
- ✅ 处理null/undefined参数值

---

## 预期测试结果

```
模型参数配置 - 端到端测试
  场景1: 页面加载和显示
    ✓ 应该显示加载状态
    ✓ 应该成功加载所有模型参数
    ✓ 应该显示空状态提示当无数据时
    ✓ 应该显示错误信息当加载失败时
  场景2: 参数修改追踪
    ✓ 应该正确追踪单个参数修改
    ✓ 应该正确追踪多个参数修改
    ✓ 应该正确计算修改数量
  场景3: 保存功能
    ✓ 应该拒绝保存当无修改时
    ✓ 应该成功保存修改
    ✓ 应该显示错误当保存失败时
    ✓ 应该设置saving状态当保存中
  场景4: 边界情况
    ✓ 应该处理空projectId
    ✓ 应该处理API返回异常数据结构
    ✓ 应该处理参数值为null或undefined

15 passing (2s)
```

---

## 手动验证清单

由于端到端测试需要完整环境，也可以手动验证：

### 加载测试
- [ ] 打开页面，看到loading效果
- [ ] Loading在2秒内消失
- [ ] 数据正常显示
- [ ] 无数据时显示空状态

### 修改测试
- [ ] 修改一个参数，看到"已修改1个参数"
- [ ] 修改多个参数，数量正确
- [ ] 修改提示实时更新

### 保存测试
- [ ] 无修改时保存，提示"没有需要保存的修改"
- [ ] 有修改时保存，看到按钮loading
- [ ] 保存成功，提示成功
- [ ] 保存成功，修改数量清零
- [ ] 保存失败，显示错误提示

### 边界测试
- [ ] 快速切换页面，无报错
- [ ] 网络断开，显示错误提示
- [ ] 参数值为空，能正常显示

---

## 测试报告

测试完成后，生成报告：
```bash
npm run test:e2e:coverage
```

报告将保存在 `coverage/` 目录。

---

## 故障排查

### 问题1: Cannot find module '@vue/test-utils'
**解决:**
```bash
npm install --save-dev @vue/test-utils@1.3.6
```

### 问题2: Unexpected token import
**解决:** 确保 `babel.config.js` 存在并正确配置

### 问题3: Element UI components not found
**解决:** 在 `tests/setup.js` 中引入 Element UI

### 问题4: $message is undefined
**解决:** 在 `tests/setup.js` 中添加全局存根

---

## 持续集成

添加到 CI/CD 流程：
```yaml
# .gitlab-ci.yml
test:e2e:
  stage: test
  script:
    - cd ruoyi-ui
    - npm install
    - npm run test:e2e
  artifacts:
    reports:
      coverage_report:
        coverage_format: cobertura
        path: ruoyi-ui/coverage/cobertura-coverage.xml
```

---

**测试状态:** ✅ 测试文件已创建
**下一步:** 安装依赖并运行测试
