# 🤝 Promise
- A way to deal with asynchronous events
- A Promise Object can either succeees and return
resolve
or will fail and returnreject
- Replaces functions accpeting
successCallback
andFailureCallback
# 📋 Unit Test Report
# 📝 How to write a Promise
?
function fetchData(status = true) {
const res = 'hello'
const rej = 'some error'
return new Promise((resolve, reject) => {
if (status) {
resolve(res);
} else {
reject(rej)
}
})
}
module.exports = fetchData
# 🏭 How to test Promises?
import fetchData from './promises';
const expected = {
resolve: 'hello',
reject: 'error'
}
// #region snippet
describe('Promise test suite', () => {
test('callback syntax if promise::resolve', () => {
return fetchData().then(data => {
expect(data).toBe(expected.resolve);
});
});
test('callback syntax if promise::rejected', () => {
expect.assertions(1);
return fetchData(false).catch(e => {
expect(e).toMatch(expected.reject);
})
});
test('resolves/rejects syntax if promise::resolve', () => {
return expect(fetchData())
.resolves.toBe(expected.resolve);
});
test('resolves/rejects syntax if promise::rejected', () => {
return expect(fetchData(false))
.rejects.toMatch(expected.reject);
});
test('async/await syntax if promise::resolve', async () => {
const data = await fetchData();
expect(data).toBe(expected.resolve);
});
test('async/await syntax if promise::rejected', async () => {
expect.assertions(1);
try {
await fetchData(false);
} catch (e) {
expect(e).toMatch(expected.reject);
}
});
})
// #region snippet
/** NOTE
*
* In JavaScript, there are six falsy values:
* false, 0, '', null, undefined, and NaN.
* Everything else is truthy.
*
* when testing asynchronous code
* assertion ensures callbacks are called
* our code has 1 callback
*
* toMatch is Substring match, is case sensitive
*/
← Performance proto →