当 React 被 jest 模拟时,Enzyme.mount 为 react-final-form 组件抛出“TypeError: form.subscribe is not a function”

问题描述

我在我的测试中安装了一个 react-final-form,并且 useRef 也应该被模拟。 测试失败并显示错误“[TypeError: form.subscribe is not a function]”。 如果 React 没有被模拟,则测试通过。

我无法删除对 useRef 的嘲讽,但看起来它破坏了测试。有人知道如何修复它,或者知道解决方法吗?

import React,{ useRef } from "react";
import { Form } from "react-final-form";

export const FormComponent = () => {
  const handleSubmitClick = () => console.log("submit");
  const inputRef = useRef(null);

  return (
    <Form onSubmit={handleSubmitClick}>
      {({ handleSubmit }) => (
        <form onSubmit={handleSubmit}>
          <input ref={inputRef} type="text" />
          <button type="submit">Submit</button>
        </form>
      )}
    </Form>
  );
};

import React,{useRef} from 'react';
import { configure,mount } from "enzyme";
import Adapter from "@wojtekmaj/enzyme-adapter-react-17";
import { FormComponent } from "./FormComponent";

configure({ adapter: new Adapter() });

// I quess this cause some problem during component mounting
jest.mock("react",() => ({
  ...jest.requireActual("react"),useRef: jest.fn()
}));

describe("FormComponent test",() => {
  it("should render form",() => {
    (useRef).mockReturnValue({
      current: {}
    });    
    const form = mount(<FormComponent />);

    console.log("Form",form.debug());
  });
});

任何想法都会非常有帮助)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)