Как проверить метод вызывается один раз с ферментом

Я хочу проверить мою функцию 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,
  //...
};
Другие вопросы по тегам