@craftapit/tester
Version:
A focused, LLM-powered testing framework for natural language test scenarios
87 lines (86 loc) • 3.35 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.formatResults = formatResults;
const chalk_1 = __importDefault(require("chalk"));
function formatResults(results) {
if ('total' in results) {
return formatTestResults(results);
}
else {
return formatTestResult(results);
}
}
function formatTestResult(result) {
const output = [
chalk_1.default.bold(`\nTest Scenario: ${result.scenarioTitle || 'Untitled'}`),
`Status: ${(result.success || result.passed) ? chalk_1.default.green('PASS') : chalk_1.default.red('FAIL')}`,
`Duration: ${formatDuration(result.duration)}`,
`Started: ${result.startTime ? result.startTime.toLocaleTimeString() : 'N/A'}`,
`Ended: ${result.endTime ? result.endTime.toLocaleTimeString() : 'N/A'}`,
'\nStep Results:'
];
// Handle both step types
if (result.stepResults && result.stepResults.length > 0) {
result.stepResults.forEach((step, index) => {
const status = step.success
? chalk_1.default.green('✓')
: chalk_1.default.red('✗');
output.push(`${index + 1}. ${status} ${step.step} (${formatDuration(step.duration)})`);
if (!step.success && step.error) {
output.push(` ${chalk_1.default.red('Error:')} ${step.error}`);
}
});
}
else if (result.steps && result.steps.length > 0) {
result.steps.forEach((step, index) => {
const status = step.status === 'passed'
? chalk_1.default.green('✓')
: step.status === 'failed' ? chalk_1.default.red('✗') : chalk_1.default.yellow('⚠');
output.push(`${index + 1}. ${status} ${step.description}`);
if (step.status === 'failed' && step.error) {
output.push(` ${chalk_1.default.red('Error:')} ${step.error}`);
}
});
}
// Add error if present
if (result.error) {
output.push(`\n${chalk_1.default.red('Error:')} ${result.error}`);
}
return output.join('\n');
}
function formatTestResults(results) {
const output = [
chalk_1.default.bold('\nTest Results Summary'),
`Total Scenarios: ${results.total}`,
`Passed: ${chalk_1.default.green(results.passed)}`,
`Failed: ${chalk_1.default.red(results.failed)}`,
`Total Duration: ${formatDuration(results.duration)}`,
'\nScenario Results:'
];
results.results.forEach((result, index) => {
const status = result.success
? chalk_1.default.green('PASS')
: chalk_1.default.red('FAIL');
output.push(`${index + 1}. ${result.scenarioTitle}: ${status} (${formatDuration(result.duration)})`);
});
return output.join('\n');
}
function formatDuration(ms) {
if (ms === undefined) {
return '0ms';
}
if (ms < 1000) {
return `${ms}ms`;
}
else if (ms < 60000) {
return `${(ms / 1000).toFixed(2)}s`;
}
else {
const minutes = Math.floor(ms / 60000);
const seconds = ((ms % 60000) / 1000).toFixed(2);
return `${minutes}m ${seconds}s`;
}
}