poku
Version:
🐷 Poku makes testing easy for Node.js, Bun, Deno, and you at the same time.
71 lines (70 loc) • 2.79 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.waitForPort = exports.waitForExpectedResult = exports.sleep = void 0;
const node_assert_1 = require("assert");
const node_net_1 = require("net");
const checkPort = (port, host) => new Promise((resolve) => {
const client = (0, node_net_1.createConnection)(port, host);
client.on('connect', () => {
client.end();
resolve(true);
});
client.on('error', () => resolve(false));
});
/** Wait until the defined milliseconds. */
const sleep = (milliseconds) => {
if (!Number.isInteger(milliseconds))
throw new Error('Milliseconds must be an integer.');
return new Promise((resolve) => setTimeout(resolve, milliseconds));
};
exports.sleep = sleep;
/** Wait until a result is equal the expected value. */
const waitForExpectedResult = async (callback, expectedResult, options) => {
const delay = options?.delay || 0;
const interval = options?.interval || 100;
const timeout = options?.timeout || 60000;
if (typeof callback !== 'function')
throw new Error('Callback must be a function.');
if (!Number.isInteger(interval))
throw new Error('Interval must be an integer.');
if (!Number.isInteger(timeout))
throw new Error('Timeout must be an integer.');
if (!Number.isInteger(delay))
throw new Error('Delay must be an integer.');
await (0, exports.sleep)(delay);
const startTime = Date.now();
while (true) {
const result = await callback();
if (typeof expectedResult === 'function') {
if (typeof result === 'function' && result.name === expectedResult.name)
break;
}
else if (typeof expectedResult === 'symbol') {
if (typeof result === 'symbol' &&
String(result) === String(expectedResult))
break;
}
else {
try {
options?.strict
? (0, node_assert_1.deepStrictEqual)(result, expectedResult)
: (0, node_assert_1.deepEqual)(result, expectedResult);
break;
}
catch { }
}
if (Date.now() - startTime >= timeout)
throw new Error('Timeout');
await (0, exports.sleep)(interval);
}
await (0, exports.sleep)(delay);
};
exports.waitForExpectedResult = waitForExpectedResult;
/** Wait until the defined port is active. */
const waitForPort = async (port, options) => {
const host = options?.host || 'localhost';
if (!Number.isInteger(port))
throw new Error('Port must be an integer.');
await (0, exports.waitForExpectedResult)(async () => await checkPort(port, host), true, options);
};
exports.waitForPort = waitForPort;