$ErrorActionPreference = "Stop" $projectRoot = Resolve-Path "$PSScriptRoot\..\.." $backendRoot = Join-Path $projectRoot "project\backend" $reportDir = Join-Path $PSScriptRoot "reports" $logFile = Join-Path $reportDir "unit_test_log.txt" $summaryFile = Join-Path $reportDir "unit_test_summary.txt" New-Item -ItemType Directory -Path $reportDir -Force | Out-Null Push-Location $backendRoot try { $env:NO_COLOR = "1" $oldErrorActionPreference = $ErrorActionPreference $ErrorActionPreference = "Continue" $output = & cmd.exe /d /s /c "npm.cmd test -- tests/quality-rules.spec.ts 2>&1" $exitCode = $LASTEXITCODE $ErrorActionPreference = $oldErrorActionPreference } finally { $ErrorActionPreference = "Stop" Pop-Location } $ansiPattern = "$([char]27)\[[0-9;]*m" $textOutput = $output | ForEach-Object { $_.ToString() -replace $ansiPattern, "" } $textOutput | Set-Content -Path $logFile -Encoding UTF8 $textOutput | ForEach-Object { Write-Host $_ } $result = "PASS" if ($exitCode -ne 0) { $result = "FAIL" } @( "ServicePilot 单元测试执行记录", "执行时间:$(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')", "测试对象:project/backend/tests/quality-rules.spec.ts", "测试范围:工单状态流转、用户权限隔离、SLA 判断、附件规则", "预期标准:核心业务规则通过率 100%,整体用例通过率不低于 95%", "执行结果:$result", "详细日志:$logFile" ) | Set-Content -Path $summaryFile -Encoding UTF8 Write-Host "单元测试日志已生成:$logFile" Write-Host "单元测试摘要已生成:$summaryFile" if ($exitCode -ne 0) { exit $exitCode }