У меня есть хук, который я хочу протестировать и который выглядит примерно так:
export useFunc(){
const func = async () => {
const [result, otherStuff] = await Promise.all([getSomeData(), someOtherStuff()])
if (!result){
return; // I NEED TO TEST THIS
}
return result;
}
return { func };
}
Тест устроен так:
it("whatever description", () => {
const { result } = renderHook(() => useFunc());
const { func } = result.current;
// I need to somehow test that the return gets hit inside `func`!
});
Как мне протестировать этот оператор возврата?
Он не импортируется, я забыл упомянуть, что тестирую здесь хук. Будет обновляться! Спасибо @Гарри!
Просто вызовите func
из теста и убедитесь, что вы получили нуль или что-то в этом роде. Также вы не ждете Promise.all
, поэтому тест всегда будет возвращать значение null. Я бы сказал: напишите тест для случая успеха, пройдите его. После прохождения второй тест должен утверждать, что возвращаемое значение пусто. Если это не так, вы знаете, что не попали в свой блок if
Ой, пропустил ожидание на Promise.all
, когда я скопировал это, просто обновил! Спасибо, что поймали это! Попробую, спасибо @Tom
Что возвращает getSomeData
? Кроме того, почему вы используете Promise.all
, если у вас есть только одна вещь, которую вы ждете? Просто ждать этого? const result = await getSomeData();
.
getSomeData
в этом случае просто возвращает словарь, но я считаю, что могу издеваться над любым ложным значением. Обновлен код, чтобы отразить, что я на самом деле использую Promise.all
и для других вещей. Спасибо!
объект, а не словарь
Хорошо, что-то вроде этого работает, так же просто, как просто вызвать функцию, как упомянул Том!
it("whatever description", async () => {
mockGetSomeData.mockResolvedValueOnce(undefined) // just need to make sure this is mocked properly
const { result } = renderHook(() => useFunc());
const { func } = result.current;
const returnedValue = await func();
expect(returnedValue).toBe(undefined);
});
Импортируется ли внутренняя функция в этот модуль?