UNPKG

@typed/test

Version:
67 lines 2.63 kB
import { blue } from 'typed-colors'; import { createAssertionsEnvironment } from '../assertions'; export function it(does, test) { return new It(does, test); } var It = (function () { function It(name, test) { this.name = blue('it') + " " + name; this.test = test; } It.prototype.run = function (timeout) { if (timeout === void 0) { timeout = 2000; } var test = this.test; var _a = createAssertionsEnvironment(), assertions = _a.assertions, stats = _a.stats; return failAfterGivenTimeout(timeout, runTest(test, assertions)) .then(function () { if (stats.count === 0) throw new Error("No assertions have been made"); return { passed: true, error: void 0 }; }) .catch(function (error) { return ({ passed: false, error: error }); }); }; return It; }()); function runTest(test, assertions) { switch (test.length) { // not using assertions passed in -- always fail case 0: return Promise.reject(new Error("No assertions have been made")); // synchronous test or returning promise -- promise will reject if test throws case 1: return new Promise(function (resolve) { return resolve(test(assertions, Function.prototype)); }); // is using done() callback to signal test completion default: { return new Promise(function (resolve, reject) { try { var result = test(assertions, function (error) { // use promise to ensure test returns first new Promise(function (res) { return setTimeout(res, 0, error); }).then(function (err) { if (err) return reject(err); resolve(); }); }); if (result && typeof result.then === 'function') reject(new Error("A promise-returning test should not use 'done' callback")); } catch (err) { reject(err); } }); } } } function failAfterGivenTimeout(time, promise) { return new Promise(function (resolve, reject) { var id = setTimeout(function () { reject(new Error("Timed out after " + time + " ms")); clearTimeout(id); }, time); promise.then(function (value) { clearTimeout(id); resolve(value); }, reject); }); } //# sourceMappingURL=it.js.map