имитационная функция с возвращаемым имитационным значением в шутку

#javascript #unit-testing #testing #jestjs #typescript2.0

Вопрос:

Я использую react-redux для создания промежуточного программного обеспечения и хотел бы написать для него какой-нибудь тест. Как я могу имитировать возврат из вспомогательной функции checkNumberHistory , чтобы проверить if заблокированную логику ?

 import {checkNumberHistory} from '@src/helper';

export const middlewareAction = (): AppThunk => {
  return async (dispatch, getState) => {
    const recordededNumber = getState()?.recordedNumber || 0;
    const strNumber = getState()?.strNumber || 0;
    const isNumberChanged = checkNumberHistory(recordededNumber, strNumber);

    if (isNumberChanged) {
      dispatch(setNumber(strNumber));
    }
  };
};
 

Комментарии:

1. Можете ли вы показать, где checkNumberHistory определено и как оно импортируется в промежуточное программное обеспечение?

2. обновлено это просто функция экспорта из другого файла

3. Является ли функция детерминированной? Вы определенно можете издеваться над импортом, мой инстинкт будет заключаться в том, чтобы попытаться не издеваться над ним, а затем ваш тест также проверяет эту функцию

4. я предпочитаю не тестировать эту функцию. так как это модульный тест. я хочу изолировать тест, и логика checkNumberHistory уже была проверена в другом месте

5. Да, я бы лично издевался над государственным объектом

Ответ №1:

Вы должны быть в состоянии использовать jest.mock , чтобы издеваться над checkNumberHistory импортом. Ниже показано использование фактических значений для других именованных импортных и насмешливых checkNumberHistory :

 jest.mock('@src/helper', () => ({
  ...jest.requireActual('@src/helper'),
  checkNumberHistory: () => 'Some mocked return value',
}));

describe('middleware tests', () => {
  it('does something', () => {
    // test here
  });
});
 

Как упоминалось в моем комментарии, я стараюсь не издеваться над вспомогательными функциями, если в этом нет необходимости (т. Е. Если они детерминированы).