#reactjs #testing #enzyme
#reactjs #тестирование #фермент
Вопрос:
У меня есть компонент react, который я хочу протестировать структуру.
Поэтому, когда я запускаю wrapper.debug()
его, он показывает мне такой результат.
<Fragment>
<div className="SignupLoginContainer">
<div className="SignupLoginContainer__SliderBtnContainer">
<LoginSignupSliderButton toShow={[Function: toShow]} />
</div>
<div className="SignupLoginContainer__Form_Container">
<Login isLoggingInOrSigningUp={true} />
</div>
</div>
</Fragment>
Затем я тестирую это как:
expect(wrapper.matchesElement(
<Fragment>
<div className="SignupLoginContainer">
<div className="SignupLoginContainer__SliderBtnContainer">
<LoginSignupSliderButton toShow={() => true} />
</div>
<div className="SignupLoginContainer__Form_Container">
<Login isLoggingInOrSigningUp={true} />
</div>
</div>
</Fragment>
)).toBeTrue()
Вот мой метод визуализации компонентов:
render() {
return (
<Fragment>
<div className={styles.SignupLoginContainer}>
<div className={styles.SignupLoginContainer__SliderBtnContainer}>
<LoginSignupSliderButton toShow={(val: boolean) => this.toLogInOrSignUp(val)} />
</div>
<div className={styles.SignupLoginContainer__Form_Container}>
<Login isLoggingInOrSigningUp={this.state.toLoginOrSignup} />
</div>
</div>
</Fragment>
);
}
}
Мой тест работает, если я удаляю <LoginSignupSliderButton toShow={(val: boolean) => this.toLogInOrSignUp(val)} />
его из компонента и тестирую.
Я подозреваю из-за обратного вызова?
Комментарии:
1. Привет, Арту. Со временем я исправил несколько вариантов написания вашего поста, и мне интересно, не могли бы вы теперь начать прогонять свой материал через английскую проверку орфографии. В наши дни их можно бесплатно подключать к браузерам. Помните, что редакторы — это добровольный ресурс, и мы не хотим продолжать исправлять одни и те же ошибки. Спасибо!
Ответ №1:
Что вам нужно snapshot testing
, так это:
// yourcomp.test.js
import YourComp from './wherever-it-lives';
it('renders correctly', () => {
const wrapper = shallow(<YourComp/>);
expect(wrapper).toMatchSnapshot();
});
После прохождения этого теста __snapshots__
в каталоге вашего проекта будет создана папка с правильным снимком для разметки ваших компонентов.
ПРИМЕЧАНИЕ: Если вы когда-нибудь снова обновите свою разметку (HTML), этот тест завершится неудачей, пока вы не обновите свой снимок следующим образом:
jest --updateSnapshot
И ваш тест должен пройти снова.
PS. Я, конечно, предположил, что вы используете jest в качестве тестового бегуна.
Комментарии:
1. зачем мне нужен снимок? Однако я хочу изолировать тест. может возникнуть путаница, если я создам тест для всей структуры? да, сэр, я использую jest. спасибо за ваш ответ
2. если вы выполняете мелкий рендеринг (как я показал в примере), то вы будете только повторно создавать разметку вашего компонента. Вам нужно тестирование моментальных снимков, чтобы вам не приходилось постоянно беспокоиться о том, чтобы сопоставлять вещи вручную.