Friday, September 28, 2018

Testing Javascript Promise With Jest

Overview

Jest offers the function expect() in combination with the properties resolves or rejects to test a function that return a Promise. This is just a reminder.

Link: An Async Example

describe('Testing promise with jest', () => {

 const buildAsyncFunction = function(promiseMustSucceed, result) {
  return (url) =>
   new Promise((resolve, reject) => {
    if(promiseMustSucceed)
     resolve(result);
    else
     reject(result);
   });
 };

 const errorResult = "error";
 const okResult    = "ok";
 const testUrl     = "http://foo";

 it('Async function should succeed', () => {

  const f = buildAsyncFunction(true, okResult);
  expect( f(testUrl) ).resolves.toEqual(okResult);
 });

 it('`Async function should failed', () => {

  const f = buildAsyncFunction(false, errorResult);
  expect( f(testUrl) ).rejects.toEqual(errorResult);
 });

 it('Async function should failed, but promise returned by catch() should succeed', () => {
  
  const func0 = buildAsyncFunction(false, errorResult);
  const promise0 = func0(testUrl);

  expect( promise0 ).rejects.toEqual(errorResult);     

  const ff = promise0
     .then(() => { throw Error('then() block unexpectedly called')})
     .catch((error) => { 
      console.log(`function f() failed error:${error}`); 
      expect(error).toEqual(errorResult);
      return okResult; 
     });

  expect(ff).resolves.toEqual(okResult);
 });
}); 

No comments:

Post a Comment