#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
});
});
Как упоминалось в моем комментарии, я стараюсь не издеваться над вспомогательными функциями, если в этом нет необходимости (т. Е. Если они детерминированы).