UNPKG

kizu

Version:

An easy-to-use, fast, and defensive Typescript/Javascript test runner designed to help you to write simple, readable, and maintainable tests.

90 lines (89 loc) 4.39 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.printResultsByFile = printResultsByFile; exports.printFileResults = printFileResults; exports.printSummary = printSummary; const kleur_1 = __importDefault(require("kleur")); const isTestPassing_1 = require("./isTestPassing"); const serialize_error_1 = require("serialize-error"); const sortTestResults_1 = require("./sortTestResults"); const log = console.log; const successSymbol = kleur_1.default.green('✔'); const failureSymbol = kleur_1.default.red('✖'); const hr = kleur_1.default.gray('\n────────────────────────────────\n'); const noTestErrorTpl = (files) => kleur_1.default.red().bold(` Error: ${files.length} spec file(s) have no tests. This could indicate a compilation error (ie. Typescript), or an early runtime error. All spec files must have at least one test. The following spec files do not have any attempted or completed tests: ${files.join(', ')} `); function printResultsByFile(resultsByFile, showOnlyFailures = false) { const sortedResults = (0, sortTestResults_1.sortTestResults)(resultsByFile); for (const [filename, tests] of sortedResults) { printFileResults(filename, tests, showOnlyFailures); } } function printFileResults(filename, tests, showOnlyFailures = false) { const hasFailure = tests.some((test) => !(0, isTestPassing_1.isTestPassing)(test)); if (showOnlyFailures && !hasFailure) return; const header = `${kleur_1.default.underline().blue(filename)} ${hasFailure ? failureSymbol : successSymbol}\n`; log(header); tests.forEach(((test) => { if (showOnlyFailures && (0, isTestPassing_1.isTestPassing)(test)) return; log(`${test.description} ${(0, isTestPassing_1.isTestPassing)(test) ? successSymbol : failureSymbol}`); test.assertions.forEach((assertion) => { if (showOnlyFailures && assertion.pass) return; log(kleur_1.default.gray(` ${assertion.description} ${assertion.pass ? successSymbol : failureSymbol}`)); !assertion.pass && printFailedAssertionDiag(assertion); }); test.error && printError(test.error); log(''); })); } function printError(serializedError) { log(hr); log((0, serialize_error_1.deserializeError)(serializedError)); log(hr); } function printFailedAssertionDiag(assertion) { if (!assertion.diagnostic && !assertion.stack) return; log(hr); assertion.diagnostic && log(assertion.diagnostic); assertion.stack && log(kleur_1.default.grey(filterStackTrace(assertion.stack))); log(hr); } function printSummary(finalResults) { const successRate = finalResults.numSuccessfulTests / finalResults.numTests; const assertionSuccessRate = finalResults.numSuccessfulAssertions / finalResults.numAssertions; const numFilesWithNoTests = finalResults.filesWithNoTests.length; if (assertionSuccessRate === 1) { log(kleur_1.default.bold().green(`${successSymbol} ${finalResults.numSuccessfulAssertions}/${finalResults.numAssertions} assertions passed`)); } else { log(kleur_1.default.bold().red(`${failureSymbol} ${finalResults.numSuccessfulAssertions}/${finalResults.numAssertions} assertions passed`)); } if (successRate === 1) { log(kleur_1.default.bold().green(`${successSymbol} ${finalResults.numSuccessfulTests}/${finalResults.numTests} tests passed`)); } else { log(kleur_1.default.bold().red(`${failureSymbol} ${finalResults.numSuccessfulTests}/${finalResults.numTests} tests passed`)); } numFilesWithNoTests && log(noTestErrorTpl(finalResults.filesWithNoTests)); } function filterStackTrace(stack) { const ignoreRegex = [ /at Generator.next \(<anonymous>\)/, /at new Promise \(<anonymous>\)/, /assertions\/index.[ts|js]{2}/, /\/kizu\/[src|dist]{3,4}\/test.[ts|js]{2}/, ].reduce((combined, exp) => (new RegExp(`${combined.source}|${exp.source}`)), new RegExp('a^')); return stack.split('\n').reduce((acc, line) => (!ignoreRegex.test(line) ? acc.concat([line]) : acc), []).join('\n'); } //# sourceMappingURL=output.js.map