Тестирование события onClose от компонента, вызываемого с помощью jest - PullRequest
0 голосов
/ 12 октября 2018

Я делаю тесты для реактивного компонента, используя шутки и энзимы, и не выяснил, как проверить событие onClose из меню material-ui.То же самое относится и к другим компонентам, но мы можем придерживаться меню ради этого вопроса.Вот мой компонент:

import { Menu, MenuItem } from "@material-ui/core";

export class ItemPreviewerPage extends React.Component<ComponentProps, ComponentState> {
  constructor(props) {
    super(props);
    this.state = {
        anchorEl: undefined,
        fieldsetMenu: undefined,
        isColumnSelectorOpen: false,
    };
  }

  render() {
    const { classes } = this.props;
    const moreMenuOpen = Boolean(this.state.anchorEl);

    return (
        <Menu className={classes.cardMenu}
              id="long-menu"
              anchorEl={this.state.anchorEl}
              open={moreMenuOpen}
              onClose={() => this.handleClose()}
              PaperProps={{
                style: {
                    maxHeight: 48 * 4.5,
                    width: 200
                }
               }}>
        </Menu>
    );
  }
}

, и для теста я ожидал, что Меню закроется, если я установлю состояние anchorEl в true, а затем в false.

it("Calls the handleClose when the Menu is closed", () => {
    const props = initialProps;

    const wrapper = shallow(<ItemPreviewerPage {...props} />);
    const spy = jest.spyOn(wrapper.instance(), "handleClose");

    wrapper.setState({ anchorEl: true });
    wrapper.instance().forceUpdate();        
    wrapper.setState({ anchorEl: false });
    wrapper.instance().forceUpdate();

    expect(spy).toBeCalled();
});

Что не так?Как я могу проверить onClose?

1 Ответ

0 голосов
/ 18 октября 2018

Я разобрался, как это проверить.SetState не влияет напрямую на поведение, мне нужно было использовать функцию имитации с аргументом close:

it("Calls handleClose when menu is closed", () => {
    const props = initialProps;
    const tree = shallow(<ItemPreviewerPage {...props} />);
    tree.find(Menu).simulate("close");
    expect(props.handleClose).toBeCalled();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...