如何在jest中更改钩子状态值?



我是新手。我只是在开玩笑地改变钩子状态。但我找不到任何文档来实现相同的功能。以下是我在签到界面的钩子状态

const [form, setForm] = React.useState({
email: "",
phoneNumber: "",
password: "",
signUpType: SignUpType.PHONE_NUMBER,
});

我想在测试时将signUpType的状态更改为EMAIL。这是如何实现的?我做了以下

it("Email validation", () => {
const email = "sample.s@abc.com";
// Stub the initial state
const stubInitialState = [{ signUpTyp: "EMAIL" }];
React.useState = jest.fn().mockReturnValue([stubInitialState, {}]);
const tree = mount(
<Provider store={configureStore}>
<SignIn />
</Provider>
);
expect(tree.find('CustomTextInput[attrName="email"]').prop("value")).toBe(
""
);
expect(email).toMatch(/^w+([.-]?w+)*@w+([.-]?w+)*(.w{2,})+$/);
});

但是上面的代码不适合我。请帮我找到一个解决方案。此外,根据用户的选择,TextInput将是emailphoneNumebr

您可以尝试使用jest.spyOnapi来模拟React.useState方法:

const stubInitialState = [{ signUpTyp: "EMAIL" }];
const mockedSetform = jest.fn();
jest.spyOn(React, 'useState').mockReturnValue([stubInitialState, mockedSetform]);

jest.spyOn