Как написать контрольные примеры, чтобы охватить все вложенные обратные вызовы then в цепочке обещаний - PullRequest
1 голос
/ 29 апреля 2019

Мне трудно охватить всю цепочку обещаний в моем модульном тесте. Я нашел статьи, которые дали мне самое близкое решение, но проблема заключалась в том, что «тогда» мне нужно вызвать три функции, которые не возвращают обещание.

Ниже приведен пример / образец, который я пробовал

async = jest.fn(() => {
  return Promise.resolve('value');
});

async1 = jest.fn(() => {
  return Promise.resolve('value1');
});

async2 = jest.fn(() => {
  return Promise.resolve('Final Value');
});


it('test my scenario', (done) => {
  someChainPromisesMethod()
    .then(data => {
      expect(async1).toBeCalledWith('value');
      expect(async2).toBeCalledWith('value1');
      expect(data).toEqual('Final Value');
      done(); 
  });
});

Ниже приведена функция, которая возвращает другую функцию с вложенными функциями then. Мне нужна помощь с тестовыми случаями, чтобы покрыть их все.

function consolidatedReport(param1, param2){

   const somedata = param1.data;
   const someOtherData = param2.data;

  if(true){ 
     doThisthing(); 
   }

  return promiseChainBegin(somedata, someOtherData)
    .then(response => response && functionOne(somedata, someOtherData)
    .then(response => response && functionTwo(somedata, someOtherData)
    .then(response => response && functionThree(somedata, someOtherData)
    .then(response => response && functionFour(somedata, someOtherData)
    .then(response => {
       if(response) {
           notApromiseFuncOne(somedata)(someOtherData);
           notApromiseFuncTwo(somedata)(someOtherData);
           notApromiseFuncThree(somedata)(someOtherData);
        } else{
           notApromiseFailCase(someOtherData);
        }
    });
}

У меня возникли проблемы с закрытием вложенных функций затем.

1 Ответ

0 голосов
/ 29 апреля 2019

Вы бы высмеяли каждое из functionOne и т. Д. Разрешенных значений:

import functionOne from '../path/to/functionOne';
import functionTwo from '../path/to/functionTwo';
import functionThree from '../path/to/functionThree';

jest.mock('../path/to/functionOne');
jest.mock('../path/to/functionTwo');
jest.mock('../path/to/functionThree');

it('test my scenario', () => {
  functionOne.mockResolvedValue('value 1');
  functionTwo.mockResolvedValue('value 2');
  functionTwo.mockResolvedValue('value 3');

  return someChainPromisesMethod()
    .then(data => {
      expect(functionOne).toBeCalledWith('value returned by promise');
      expect(functionTwo).toBeCalledWith('value 1');
      expect(functionThree).toBeCalledWith('value 2');

      expect(data).toEqual('Final Value');
  });
});

Это не совсем ваш код, но идея такова. Вы высмеиваете разрешенное значение для каждой из ваших функций.

...