Тестирование изолированной функции компонента в React Jest

Я новичок в Jest и Enzyme, и я наткнулся на проблему:

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

somefunction = () => {
   this.myReference.current.childFunction();
   this.doSomethingOther();
}    

Теперь я хочу протестировать функцию некоторая функция. Я хочу проверить, вызывалась ли функция doSomethingOther. Используя неглубокий рендер, я не могу этого добиться. Тест был бы успешным, если бы this.myReference.current.childFunction(); не вызывали. Jest не может этого знать, потому что он отображает только поверхностную информацию и, следовательно, выдает ошибку.

Возможно, мне не хватает полного понимания. Интересно, есть ли у кого-нибудь идея протестировать эту функцию без использования mount.

Разве насмешки над this.myReference не решат вашу проблему?

Shubham Gupta 26.09.2018 16:29

Ссылки не работают с мелким рендерингом. Вам придется как-то издеваться над this.myReference, как говорит @ShubhamGupta, чтобы он работал.

Reynicke 26.09.2018 16:35
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
533
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Взгляните на приведенный ниже код, где я неглубоко отрисовываю компонент, а затем получаю экземпляр класса и имитирую необходимые функции. Теперь, когда мы вызываем некоторая функция, мы проверяем, был ли вызван doSomethingOther. (Предполагается, что вы используете шутку + фермент)

const wrapper = shallow(<Comp />);
const inst = wrapper.instance();
inst.myReference = {
    current: {
        childFunction: jest.fn()
    }
}
inst.doSomethingOther = jest.fn();
inst.somefunction();
expect(inst.doSomethingOther).toHaveBeenCalled();

Вместо childFunction: jest.fn(); вы должны использовать childFunction: jest.fn()**,** . В противном случае все работает нормально, спасибо!

Bob Senrie 27.09.2018 09:39

Другие вопросы по теме