提问人:Olivia Bates 提问时间:11/16/2023 最后编辑:Olivia Bates 更新时间:11/16/2023 访问量:31
Jest SpyOn 返回 undefined
Jest SpyOn returning undefined
问:
我正在尝试使用 react-testing-library 和 jest 编写一个 jest 单元测试,而不使用酶,因为根据我所做的研究,react 18 似乎不支持酶。因此,我先发制人地尝试仅使用上述内容编写测试。
我发现的文档和以前的问题表明,可以将 spyOn 方法传递给 Component.prototype(在本例中为 EmailForm.prototype),然后传递您尝试监视的特定方法名称(在本例中为 handleAddEmail)。此方法在我的 EmailForm 组件上定义为常规方法。
链接的问题确实特别提到了渲染应该跟随间谍,以便随后初始化间谍对象,这是我在下面的测试中尝试实现的,但它仍然返回Cannot spyOn on a primitive value; undefined given
我的测试如下:
import { render, fireEvent, screen } from "@testing-library/react";
import EmailForm from "./EmailForm";
const mockSubmit = jest.fn();
const renderComponent = () => {
return render(<EmailForm actionType="send_email" actionOrigin="Communications" handleActionFormSubmit={mockSubmit} />);
};
describe("EmailForm component", () => {
it("handles add email with Enter key press", async () => {
const handleAddEmailSpy = jest.spyOn(EmailForm.prototype, "handleAddEmail");
renderComponent();
const recipientField = screen.getByTestId("recipient-field");
fireEvent.change(recipientField, { target: { value: "[email protected]" } });
fireEvent.keyDown(recipientField, { key: "Enter" });
expect(handleAddEmailSpy).toHaveBeenCalled();
});
});
附加到被监视的 MUI 文本字段的方法如下:
// Function to handle adding new email recipient
const handleAddEmail = (newEmail: string) => {
if (!newEmail.trim()) {
formik.setFieldError("recipient",
t("FormValidation.Recipient_Required"));
return;
}
if (!formik.values.recipients.includes(newEmail)) {
// Add new email recipient
formik.setFieldValue("recipients", [
...formik.values.recipients,
newEmail
]);
formik.setFieldValue("recipient", "");
}
};
我已经为我当前的表单和测试链接了一个代码沙箱。我将不胜感激任何帮助,因为我不确定为什么间谍似乎没有定义。
答: 暂无答案
评论