如何测试改变其他道具Jest酶的道具功能

问题描述

我有一个在props中接收值“ openDrawer”(布尔)和函数“ toggleDrawerHandler”的组件,函数“ toggleDrawerHandler”更改了“ openDrawer” prop的值。 我想通过模拟一个触发该功能的div来测试它,并检查'​​openDrawer'的值更改时组件是否更改。

组件

const NavigationMobile = (props) => {
  const { openDrawer,toggleDrawerHandler } = props;
  let navClass = ["Nav-Mobile"];
  if (!openDrawer) navClass.push("Close");
  return (
    <div className="Mobile">
      <div className="Menubar" onClick={toggleDrawerHandler}>
        {openDrawer ? <FaTimes size="1.5rem" /> : <FaBars size="1.5rem" />}
      </div>
      <nav className={navClass.join(" ")} onClick={toggleDrawerHandler}>
        <Navigation />
      </nav>
    </div>
  );
};

发送这些道具的组件

const Header = (props) => {
  const [openDrawer,setopenDrawer] = useState(false);

  const toggleDrawerHandler = () => {
    setopenDrawer((prevstate) => !prevstate);
  };

  return (
    <header className="Header">
      <NavigationMobile openDrawer={openDrawer} toggleDrawerHandler={toggleDrawerHandler} />
    </header>
  );
};

我的测试,但不起作用

  it("changes prop openDrawer when click",() => {
    const wrapper = shallow(<NavigationMobile />);
    expect(wrapper.find("FaBars")).toHaveLength(1);
    expect(wrapper.find("nav").hasClass("Nav-Mobile")).toBeTruthy();

    wrapper.find(".Menubar").simulate("click",true); // doesnt work

    expect(wrapper.find("FaTimes")).toHaveLength(1);
    expect(wrapper.find("nav").hasClass("Nav-Mobile Close")).toBeTruthy();
  });

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)