У меня есть этот простой компонент fallbackImage:
export interface ImageProps {
srcImage: string;
classNames?: string;
fallbackImage?: FallbackImages;
}
const Image = ({
srcImage,
classNames,
fallbackImage = FallbackImages.FALLBACK
}: ImageProps) => {
const imgToSourceFrom = srcImage;
const imgToFallbackTo = fallbackImage;
const imageRef = useRef(null);
const whenImageIsMissing = () => {
imageRef.current.src = imgToFallbackTo;
imageRef.current.onerror = () => {};
};
return (
<img ref={imageRef} src={imgToSourceFrom} className={classNames} onError={whenImageIsMissing} />
);
};
export default Image;
Работает отлично. У меня есть тестовый запуск с Jest
и React-Testing-Library
. Я проверил все, кроме одного сценария. Вот это:
const whenImageIsMissing = () => {
imageRef.current.src = imgToFallbackTo;
imageRef.current.onerror = () => {}; // This line.
};
Эта строка в основном предотвращает бесконечность L oop в случае отсутствия обоих изображений
Проблема: Я хочу проверить, что мой onerror
функция была вызвана ровно один раз. Что я действительно застрял на том, как это сделать. Вот тест ...
const { container } = render(<Image srcImage={undefined} fallbackImage={undefined} />);
const assertion = container.querySelector('img').onerror;
fireEvent.error(container.firstElementChild);
console.log(container.firstElementChild);
expect(container.firstElementChild.ref.current.onerror).toHaveBeenCalledTimes(1);
// This though has no reference to a real value. Is an example of what I want to get at.
Вопрос: Как получить доступ к функции обратного вызова ref и проверить, сколько раз была вызвана моя функция?
Любой идеи по этому поводу. Я в растерянности, я пытался издеваться refs
, я пытался издеваться и шпионить за компонентом. Я попытался использовать act и async / await, если он вызывался после. Мне действительно нужна помощь в этом ..