Как проверить метод вызывается один раз с ферментом
Я хочу проверить мою функцию handleChange, которая запускается событием onChange в выпадающем меню. Вот структура реагирования об этом меню.
class StationNavigationBar extends React.Component {
handleChange = (event, index, value) => {
this.props.onStationChange(value);
}
render() {
return (
<DropDownMenu value={this.props.initial} onChange={this.handleChange}>
{ this.props.stations.map((station, index) =>
<MenuItem key={station.id} value={station.id} primaryText={station.name} />
)}
</DropDownMenu>
);
}
}
Я пытался использовать энзим для отслеживания этой функции handleChange, но кажется, что функция spy не может обнаружить событие onChange, вот мой текущий тестовый код.
describe("when `dropDownMenu` is changed", () => {
it("onStationChange should be called", () => {
let props = {
initial: 'Something',
title: 'something',
onStationChange: ()=>{},
onLogOut: ()=>{},
stations: [{
id: '1',
name: "Station 2" },
{ id: '2',
name: "Station 3" },
{ id: '3',
name: 'Station 4'}]
};
const stationNavigationBar = shallow(<StationNavigationBar {...props} />);
const instance = stationNavigationBar.instance();
const goSpy = sinon.spy(instance, 'handleChange');
stationNavigationBar.update();
const toolbarGroup = stationNavigationBar.find('ToolbarGroup');
const dropDownMenu = toolbarGroup.find('DropDownMenu');
dropDownMenu.simulate('change');
expect(goSpy.calledOnce).toBe(true);
});
});
Есть ли какая-то часть, на которую я не обращал внимания? Какую часть я пропустил в моем тестовом случае.
1 ответ
Решение
Создайте метод шпиона и передайте шпиона как onStationChange
двигательный
const onStationChange = sinon.spy();
const props = {
initial: 'Something',
title: 'something',
onStationChange,
//...
};