Я довольно новичок в тестировании компонентов React и пытаюсь протестировать ссылку, созданную с помощью React.createRef.Я прочитал этот замечательный ответ и не уверен, что он решает мою проблему. componentDidMount вызывается перед обратным вызовом ref
constructor(props) {
super(props);
this.myRef = React.createRef();
console.log('this.myRef in constructor', this.myRef);
}
Этот журнал консоли возвращает значение NULL и ожидается, поскольку компонент еще не обработан.
componentDidMount() {
console.log('this.myRef in component did mount', this.myRef);
}
return (
<div className="tab_bar">
<ul ref={this.myRef} className="tab__list direction--row" role="tablist">
{ childrenWithProps }
</ul>
</div>
Консольlog возвращает элемент ul
html в componentDidMount.Это также ожидается, потому что компонент рендерился.
HOWEVER,
Когда я тестирую этот компонент:
const children = <div> child </div>;
describe('Tab component', () => {
it('should render', () => {
const wrapper = mount(<Tab>{children}</Tab>);
const ulElement = wrapper.find('ul');
const instance = ulElement.instance().ref;
console.log('instance', instance);
expect(wrapper).toMatchSnapshot();
});
});
Мои операторы журнала консоли в моем терминале (это.myRef в моем конструкторе и в componentDidMount) оба говорят, что {current: null}
и instance
не определены.
Может кто-нибудь, пожалуйста, помогите мне понять, что происходит?Спасибо!