40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
|
export interface TestResults {
|
||
|
passed: string[];
|
||
|
failed: [string, any][];
|
||
|
}
|
||
|
|
||
|
export function runTests(fixture: any): TestResults {
|
||
|
let results: TestResults = { passed: [], failed: [] };
|
||
|
for (let testName in fixture) {
|
||
|
let test = fixture[testName];
|
||
|
if (typeof test === "function") {
|
||
|
try {
|
||
|
test();
|
||
|
results.passed.push(testName);
|
||
|
}
|
||
|
catch (e) {
|
||
|
results.failed.push([testName, e]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return results;
|
||
|
}
|
||
|
|
||
|
export function printResults(results: TestResults): void {
|
||
|
for (let [testName, error] of results.failed) {
|
||
|
let message = "stack" in error ? error.stack : String(error);
|
||
|
console.error(`${testName} failed.\n${message}`);
|
||
|
}
|
||
|
|
||
|
let passedCount = results.passed.length;
|
||
|
let failedCount = results.failed.length;
|
||
|
let totalCount = passedCount + failedCount;
|
||
|
|
||
|
let message = `Run ${failedCount > 0 ? "failed" : "succeeded" }: passed: ${passedCount}, failed: ${failedCount}, total: ${totalCount}.`;
|
||
|
if (results.failed.length) {
|
||
|
console.error(message);
|
||
|
}
|
||
|
else {
|
||
|
console.log(message);
|
||
|
}
|
||
|
}
|