58 lines
1.6 KiB
TypeScript
58 lines
1.6 KiB
TypeScript
import * as smartpromise from '../ts/index.js';
|
|
import { tap, expect } from '@push.rocks/tapbundle';
|
|
|
|
tap.test('simple deferred should resolve with correct value', async () => {
|
|
const done = smartpromise.defer<string>();
|
|
let result: string | undefined;
|
|
|
|
done.promise.then((stringArg) => {
|
|
result = stringArg;
|
|
});
|
|
done.resolve('hello');
|
|
|
|
await done.promise;
|
|
expect(result).toEqual('hello');
|
|
});
|
|
|
|
tap.test('deferred should work with async functions and track status/duration', async () => {
|
|
const myAsyncFunction = async (): Promise<string> => {
|
|
const done = smartpromise.defer<string>();
|
|
|
|
setTimeout(() => {
|
|
done.resolve('hi');
|
|
}, 100); // reduced timeout for testing
|
|
|
|
expect(done.status).toEqual('pending');
|
|
await done.promise;
|
|
expect(done.status).toEqual('fulfilled');
|
|
expect(done.duration).toBeGreaterThan(0);
|
|
|
|
return done.promise;
|
|
};
|
|
|
|
const result = await myAsyncFunction();
|
|
expect(result).toEqual('hi');
|
|
});
|
|
|
|
tap.test('resolvedPromise should resolve immediately with correct value', async () => {
|
|
const message = `I'll get logged to console soon`;
|
|
const result = await smartpromise.resolvedPromise(message);
|
|
expect(result).toEqual(message);
|
|
});
|
|
|
|
tap.test('rejectedPromise should reject with correct error message', async () => {
|
|
const errorMessage = 'what a lovely error message';
|
|
let caught = false;
|
|
|
|
try {
|
|
await smartpromise.rejectedPromise(errorMessage);
|
|
} catch (err) {
|
|
caught = true;
|
|
expect(err).toEqual(errorMessage);
|
|
}
|
|
|
|
expect(caught).toEqual(true);
|
|
});
|
|
|
|
export default tap.start();
|