| 29 | } |
| 30 | |
| 31 | export function printResults(results: Result[], missing: string[], extra: Scenario[]) { |
| 32 | for (const result of results) { |
| 33 | if (result.status === "pass") { |
| 34 | console.log( |
| 35 | `${color.green}PASS${color.reset} ${pad(result.scenario.method, 6)} ${pad(result.scenario.path, 48)} ${result.scenario.name}`, |
| 36 | ) |
| 37 | continue |
| 38 | } |
| 39 | if (result.status === "skip") { |
| 40 | console.log( |
| 41 | `${color.yellow}SKIP${color.reset} ${pad(result.scenario.method, 6)} ${pad(result.scenario.path, 48)} ${result.scenario.name} ${color.dim}${result.scenario.reason}${color.reset}`, |
| 42 | ) |
| 43 | continue |
| 44 | } |
| 45 | console.log( |
| 46 | `${color.red}FAIL${color.reset} ${pad(result.scenario.method, 6)} ${pad(result.scenario.path, 48)} ${result.scenario.name}`, |
| 47 | ) |
| 48 | console.log(`${color.red}${indent(result.message)}${color.reset}`) |
| 49 | } |
| 50 | if (missing.length > 0) { |
| 51 | console.log("\nMissing scenarios") |
| 52 | for (const route of missing) console.log(`${color.red}MISS${color.reset} ${route}`) |
| 53 | } |
| 54 | if (extra.length > 0) { |
| 55 | console.log("\nExtra scenarios") |
| 56 | for (const scenario of extra) |
| 57 | console.log(`${color.yellow}EXTRA${color.reset} ${routeKey(scenario)} ${scenario.name}`) |
| 58 | } |
| 59 | console.log( |
| 60 | `\n${color.dim}summary pass=${results.filter((result) => result.status === "pass").length} fail=${results.filter((result) => result.status === "fail").length} skip=${results.filter((result) => result.status === "skip").length} missing=${missing.length} extra=${extra.length}${color.reset}`, |
| 61 | ) |
| 62 | } |
| 63 | |
| 64 | function routeKey(scenario: Scenario) { |
| 65 | return `${scenario.method} ${scenario.path}` |