У меня проблема с пониманием мелкой рендеринга фермента.Проверка реквизита дочернего компонента с мелким рендерингом с использованием фермента
У меня есть компонент WeatherApplication
который имеет дочерний компонент CitySelection
. CitySelection
получает объект selectedCity
, который удерживается в состоянии WeatherApplication
s.
Компонент:
export default class WeatherApplication extends React.Component {
constructor(props) {
super(props);
this.state = {
city : "Hamburg"
}
}
selectCity(value) {
this.setState({
city: value
});
}
render() {
return (
<div>
<CitySelection selectCity={this.selectCity.bind(this)} selectedCity={this.state.city} />
</div>
);
}
}
Я тестировал sussessfully что CitySeleciton существует и что selectedCity является «Гамбург» и правильной функции передается.
Теперь я хочу проверить поведение метода selectCity.
it("updates the temperature when the city is changed",() => {
var wrapper = shallow(<WeatherApplication/>);
wrapper.instance().selectCity("Bremen");
var citySelection = wrapper.find(CitySelection);
expect(citySelection.props().selectedCity).toEqual("Bremen");
});
Этот тест не удается, так как значение citySelection.props().selectedCity
еще Hamburg.
Я проверил, что снова вызван метод render
WeatherApplication
, и this.state.city
имеет правильное значение. Но я не могу получить его через реквизит.
Большое спасибо, это работает! Что я действительно не понимаю, почему я должен это назвать. Не следует ли перекомпоновать компонент при изменении состояния (даже при его мелкомасштабном рендеринге)? – Ria
Я думаю нет. Я думаю, если вы обновите состояние с помощью события «click» или так, то оно должно. PS: Великий, чтобы помочь вам! –