1

与えられたコンポーネントMenu.tsx

import React, { useState } from 'react';
import { Grid, Button, Menu, MenuItem } from '@material-ui/core';

const Component = () => {
  const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);

  const handleMenuClick = (event: React.MouseEvent<HTMLButtonElement>) => {
    setAnchorEl(event.currentTarget);
  };

  const handleMenuClose = () => {
    setAnchorEl(null);
  };

  return (
    <Grid>
      <Button variant="contained" onClick={handleMenuClick}>
        Open Menu
      </Button>
      <Menu
        anchorEl={anchorEl}
        keepMounted
        open={Boolean(anchorEl)}
        onClose={handleMenuClose}
      >
        <MenuItem>Option 1</MenuItem>
        <MenuItem>Option 2</MenuItem>
      </Menu>
    </Grid>
  );
};

export default Component;

そしてスナップショットのテストMenu.test.tsx

import React from 'react';
import { create } from 'react-test-renderer';
import Menu from './Menu';

describe('Menu Snapshot', () => {
  it('renders correctly', () => {
    const tree = create(<Menu />).toJSON();
    expect(tree).toMatchSnapshot();
  });
});

テストを実行すると、エラーが発生しますTypeError: parentInstance.children.indexOf is not a function

グーグルで調べた後、 createNodeMock 関数を追加しようとしました:

const tree = create(<Menu />, {
  createNodeMock: (element) => element,
}).toJSON();

エラーが発生しますArgument appears to not be a ReactComponent. Keys: type,props

内部で何が起こっているのかよくわからないので、私が見つけた回避策はうまくいきませんでした。これをテストする正しい方法は何ですか?

codesanbox.ioへのリンク。

4

0 に答える 0