玩笑和酶模拟输入字段的onClick方法

时间:2019-12-10 19:54:35

标签: javascript unit-testing jestjs enzyme

我正在为一个简单的密码更新组件编写测试。我的组件具有一个带有type="checkbox"函数的onClick输入字段。单击输入复选框后,我希望我的togglePassword函数能够运行。实际功能正常运行,但是在我的测试中,我无法模拟onClick事件。

我的输入字段如下:

<input
  id="toggle-password"
  type="checkbox"
  onClick={() => togglePassword()}
/>

togglePassword函数:

  const togglePassword = () => {
    if (passType === "password") {
      setPassType("text");
    } else {
      setPassType("password");
    }
  };

要更新的挂钩:

const [passType, setPassType] = useState("password");

最后是使用passType的输入字段:

<input id="create-password" type={passType} required />

所有这些都很简单,应该很容易测试。我通过确保create-password输入字段具有type=password来开始测试。然后,我尝试模拟一次点击(因此调用togglePassword),并且希望输入字段的类型为type="text"

我尝试使用simulate("click")prop("onClick")()simulate("change", {target: {value: "checked"}})和其他一些我在S.O上发现的技术。什么都没有。

这是我目前的考试:

it("toggles passwords", () => {
  const onMock = jest.fn();
  const wrapper = mount(
    <NoAuthPasswordChange handleSubmit={onMock}  />
  );
  const form = wrapper.find("#no-auth-password-change-form");
  const createPass = form.find("#create-password");
  const togglePass = form.find("#toggle-password");
  createPass.simulate("change", { target: { value: "12345" } });
  expect(createPass.props().type).toEqual("password");
  togglePass.simulate("click");
  wrapper.update();
  expect(createPass.props().type).toEqual("text");
});

我进行了一次测试,看是否正在调用togglePassword函数。我已经看了一段时间了,我真的不确定如何在这里调用onClick方法。

0 个答案:

没有答案