Skip to content

Instantly share code, notes, and snippets.

@reneviering
Last active September 14, 2016 17:00
Show Gist options
  • Save reneviering/8ac4b84f22c5e479bdc6eaf736da88a5 to your computer and use it in GitHub Desktop.
Save reneviering/8ac4b84f22c5e479bdc6eaf736da88a5 to your computer and use it in GitHub Desktop.
// 78: Promise - API overview
// To do: make all tests pass, leave the assert lines unchanged!
describe('`Promise` API overview', function() {
it('`new Promise()` requires a function as param', () => {
const param = () => {};
assert.doesNotThrow(() => { new Promise(param); });
});
describe('resolving a promise', () => {
// reminder: the test passes when a fulfilled promise is returned
it('via constructor parameter `new Promise((resolve) => { resolve(); })`', () => {
const param = (resolve) => { resolve(); };
return new Promise(param);
});
it('using `Promise.resolve()`', () => {
return Promise.resolve('all fine');
});
});
describe('a rejected promise', () => {
it('using the constructor parameter', (done) => {
const promise = new Promise((resolve, reject) => { reject(); });
promise
.then(() => done(new Error('The promise is expected to be rejected.')))
.catch(() => done());
});
it('via `Promise.reject()`', (done) => {
const promise = Promise.reject();
promise
.then(() => done(new Error('The promise is expected to be rejected.')))
.catch(() => done());
});
});
const resolvingPromise = Promise.resolve();
const rejectingPromise = Promise.reject();
describe('`Promise.all()`', () => {
it('`Promise.all([p1, p2])` resolves when all promises resolve', () =>
Promise.all([resolvingPromise, resolvingPromise])
);
it('`Promise.all([p1, p2])` rejects when a promise is rejected', (done) => {
Promise.all([resolvingPromise, rejectingPromise])
.then(() => done(new Error('The promise is expected to be rejected.')))
.catch(() => done())
});
});
describe('`Promise.race()`', () => {
it('`Promise.race([p1, p2])` resolves when one of the promises resolves', () =>
Promise.race([resolvingPromise, resolvingPromise])
);
it('`Promise.race([p1, p2])` rejects when one of the promises rejects', (done) => {
Promise.race([rejectingPromise])
.then(() => done(new Error('The promise is expected to be rejected.')))
.catch(() => done())
});
it('`Promise.race([p1, p2])` order matters (and timing)', () =>
Promise.race([resolvingPromise,rejectingPromise])
);
});
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment