reactjs - 方法“props”意味着在 1 个节点上运行。找到了 0 个
问题描述
我正在处理测试用例:
当我运行单个测试用例时,它工作正常,但如果我为 2 个测试场景运行它的抛出错误。
我的 tsx 代码:
const onPasswordChange = useCallback((e) => {
setStatusAlert({});
setModel({ ...model, "password": e.target.value });
setPasswordError(null);
}, [setStatusAlert, setModel, setPasswordError]);
const showPasswordInput = useCallback((e) => {
e.preventDefault();
const emailIsEmpty = !model.email || model.email.length < 1;
setDisplayPasswordInput(!emailIsEmpty);
setEmailError(emailIsEmpty ? "Email is required" : null);
}, [model, setDisplayPasswordInput, setEmailError]);
我的测试用例:
describe("onPasswordChange", () => {
it("sets password to new value", async () => {
const expectedPassword = lorem.word();
mockedHttpHelper.get.mockImplementationOnce(jest.fn((params: IGetParams) => params.onGetSuccess({ data: { externalTypes: [] } } as AxiosResponse)));
await usingMount(
LoginFormComponent(defaultModelWithEmail),
async wrapper => {
await setTimeoutPromise(() => {
wrapper.find(LoginForm).find("LoginPasswordFormBody").invoke("onPasswordChange")({ target: { name: "password", value: expectedPassword } });
expect(wrapper.find(LoginForm).find("LoginPasswordFormBody").prop("model")).toEqual(expect.objectContaining({ password: expectedPassword }));
}, 100);
}
);
});
it("empties status alert", async () => {
const expectedError = lorem.word();
mockedHttpHelper.get.mockImplementationOnce(jest.fn((params: IGetParams) => params.onGetSuccess({ data: { externalTypes: [] } } as AxiosResponse)));
await usingMount(
<GrabStatusAlertContext>
<LoginForm model={defaultModelWithEmail} />
</GrabStatusAlertContext>,
async wrapper => {
await setTimeoutPromise(() => {
statusAlertContext.setStatusAlert({ color: "danger", text: expectedError });
expect(statusAlertContext.statusAlert).toEqual({ color: "danger", text: expectedError });
wrapper.find(LoginForm).find("LoginPasswordFormBody").invoke("onPasswordChange")({ target: { name: "password", value: expectedError } });
wrapper.update();
expect(statusAlertContext.statusAlert).toEqual({});
}, 100);
}
);
});
it("sets passwordError to null", async () => {
const passwordRequired = lorem.word();
mockedHttpHelper.get.mockImplementationOnce(jest.fn((params: IGetParams) => params.onGetSuccess({ data: { externalTypes: [] } } as AxiosResponse)));
await usingMount(
<GrabStatusAlertContext>
<LoginForm model={defaultModelWithEmail} />
</GrabStatusAlertContext>,
async wrapper => {
await setTimeoutPromise(() => {
// trigger passwordError by submitting an empty input and verify passwordError is not null
wrapper.find("form").simulate("submit");
expect(wrapper.find(LoginForm).find("LoginPasswordFormBody").prop("passwordError")).toEqual("Password is required");
wrapper.find(LoginForm).find(`input[type="password"]`).simulate("change", { target: { name: "password", value: passwordRequired } });
wrapper.update();
expect(wrapper.find(LoginForm).find("LoginPasswordFormBody").prop("passwordError")).toEqual(null);
}, 100);
}
);
});
});
请帮助我以任何方式解决此问题。
解决方案
我有同样的问题我只是给元素一个#id并在find()函数中使用它
推荐阅读
- c - 为链接器指定外部存储器
- amazon-web-services - 有没有办法将现有的 EC2 实例移动到云形成堆栈
- vb6 - VB6 和 ODBC 命令
- c++ - 在类中使用 static_assert - 如何?
- wix - 删除现有产品并重新安装。使用示例代码指导我
- tcp - TCP Traceroute 仅显示网关和最终目的地
- c# - 将 appsettings.json 映射到字典
- java - ubuntu for java中的环境变量
- r - 如何在 plot_ly 的 scatter3d 中绘制所有巨大的数据点?
- javascript - 禁止在第三方渠道使用 emojireact-role