我正在为一个简单的密码更新组件编写测试。我的组件具有一个带有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
方法。