Мокинг условия внутри кода с помощью модульного теста Jest - PullRequest
2 голосов
/ 02 августа 2020

Я пытаюсь создать модульный тест с помощью Jest. У меня есть функция, которая проверяет версию набора требований Outlook, и если «набор» поддерживается, он что-то делает - в этом случае он закрывает надстройку.

if (Office.context.requirements.isSetSupported('Mailbox', '1.15') {...}

В модуле test, я попытался имитировать внешние значения вызова isSetSupported () , но при запуске getCloseAddin () я получаю сообщение об ошибке:

Office. context.requirements.isSetSupported не является функцией

Он не распознает созданную мною фиктивную функцию. Я также пытался изменить значения global.Office

global.Office = {
context: {
  requirements: {
   isSetSupported: {'Mailbox', '1.5'}
  }
}

}; но безуспешно.

файл. js

const getCloseAddin = () => {
  try {
    const Office = getOffice();
    if (Office.context.requirements.isSetSupported('Mailbox', '1.15')) {
    return Office.context.ui.closeContainer();
  }
} catch (e) {
  console.error('Cannot close the add-in properly.');
  return null;
 }

};

file.test. js

it('verify we gets Undefined when working with supported version', async () => {
  const mockedIsSetSupported = jest.fn();
  mockedIsSetSupported.mockReturnValueOnce('Mailbox', '1.5');
  global.Office = {
    context: {
      requirements: {
        mockedIsSetSupported
      }
    }
  };
  const closeAddin = await getCloseAddin();
  expect(closeAddin).toBeUndefined();
});

1 Ответ

1 голос
/ 02 августа 2020

Я нашел решение для mock.fn. Я не устанавливал mock.fn в нужное место.


const mockedIsSetSupported = jest.fn().mockReturnValue(true);
global.Office = {
    context: {
        requirements: {
            isSetSupported: mockedIsSetSupported,
        },
        ui: {
            closeContainer: () => undefined,
        },
    },
};

Теперь функция isSetSupported будет использовать mock.fn вместо настоящего и не будет треснуть sh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...