@GNG999

Как протестировать функцию в компоненте React c jest /react testing library?

Есть компонент

const SmetaAccomodationItem:FC<>=()=>{
..............
    const handleChangeRoadCosts = (id: number, keyVal: string, val: string) => {
        const newList = data.map((dataEl: any, index: number) => {
            if (id === index) {
                const dataObj = {
                    ...dataEl,
                    [keyVal]: val
                }
                let qty: number | undefined = undefined;
                let price: string | undefined = undefined;
                if (['inData','outData','peopleQty','costPerDay'].includes(keyVal) ) {
                    if (!val.trim()) {
                        qty = undefined
                        price = undefined
                    } else {
                        qty = parseInt(val)
                        price = keyVal === 'ticketQty' ? 'cost' : 'ticketQty'
                    }
                    dataObj.totalCost = !!(price && qty) ? (qty * parseInt(dataEl[price])).toString() : ''
                }
                return dataObj
            }
            return dataEl
        }) //тут не законченная логика, но в целом функция сводится к преобразованию некоторых полей внутри объекта 
    }

.......

    useEffect(() => {
.........


Как протестировать handleChangeRoadCosts именно на логику правильно ли преобразовывает объект ? Вынести в отдельный файл и тестировать через jest ? Вынести в хук и замокать хук и там уже тестировать ?
  • Вопрос задан
  • 35 просмотров
Пригласить эксперта
Ответы на вопрос 1
Alexandroppolus
@Alexandroppolus
кодир
Если там хитрая логика, то лучше вынести в отдельную функцию и к ней наколбасить тестов через чистый jest. Эта функция должна получать все данные, с которыми работает, через параметр. Например, твой handleChangeRoadCosts сейчас берет некую data из замыкания, а надо это передавать доп. параметром. Тогда ты легко напишешь тесты.

В самом компоненте остаётся обезжиренный вариант, не требующий тестов:
import {myFunc} from '....';

........
const handleChangeRoadCosts = (id: number, keyVal: string, val: string) => {
    return myFunc(id, keyVal, val, data);
};
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы