React material - получение TypeError: Невозможно установить свойство 'transition' из undefined при тестировании компонента popper

Я использую реактивный материал иpopper компонент в моем проекте. Я пытаюсь проверить компонент, который использует popper с модульным тестом.

Это методы в компоненте:

constructor(props) {
    super(props);
    this.state = {
      openMenu: false,
    };
  }

  onToggleMenu() {
    this.setState(prevState => ({openMenu: !prevState.openMenu}))
  }

  onCloseMenu() {
    this.setState({openMenu: false})
  }

И это та часть рендера, где я использую popper:

         <IconButton
              classes={{root: classes.expandButton}}
              aria-label="menu"
              buttonRef={node => this.anchorEl = node}
              aria-owns={openMenu ? 'menu-list-grow' : undefined}
              aria-haspopup="true"
              onClick={() => this.onToggleMenu()}
            >
              <ArrowDropDownIcon fontSize="large"/>
            </IconButton>
            <Popper open={openMenu} anchorEl={this.anchorEl} placement="bottom-end" transition disablePortal>
              {({TransitionProps, placement}) => (
                <Grow
                  {...TransitionProps}
                  id="menu-list-grow"
                  style={{transformOrigin: placement === 'bottom' ? 'center top' : 'center bottom'}}
                >
                  <Paper>
                    <ClickAwayListener onClickAway={() => this.onCloseMenu()}>
                      <MenuList disablePadding>
                        <MenuItem onClick={onDeaktiver}>Deaktiver</MenuItem>
                      </MenuList>
                    </ClickAwayListener>
                  </Paper>
                </Grow>
              )}
            </Popper>

Я попытался проверить это так:

it('opens the menu', async () => {
    const header = editor.findByType(EditorHeader);
    expect(header.instance.state.openMenu).toBeFalsy();
    const menuButton = header.findByProps({'aria-label': 'menu'});
    menuButton.props.onClick();
    expect(header.instance.state.openMenu).toBeTruthy();
})

Но тогда я получаю ошибку:

Ошибка: Ошибка: "Ошибка: Uncaught [TypeError: Невозможно установить свойство 'transition' of undefined]

Как я могу издеваться над поппером или исправить это, чтобы у меня была эта тестовая работа?

0 ответов

Была такая же проблема с компонентом меню MUI.

Похоже, есть известная проблема с react-transition-group. В заявке есть несколько обходных путей, но большинство из них не сработало для меня, поэтому я закончил издевательство над компонентом MUI.

jest.mock('@material-ui/core', () => {
  const materialUI = jest.requireActual('@material-ui/core');
  return {
    ...materialUI,
    Menu: jest.fn(({ children, open }) => (open ? children : null)),
  };
});
Другие вопросы по тегам