gpt4 book ai didi

reactjs - 为什么 jest mock 函数没有在我的 react 测试库测试中执行?

转载 作者:行者123 更新时间:2023-11-28 20:05:30 25 4
gpt4 key购买 nike

问题

为了更好地说明,我创建了一个非常基本的代码示例。这是我要测试的代码(包含简单的 react Hook ):

const TodoHeader = ({ handleSubmit }) => {
const [value, setValue] = useState("");

return (
<form onSubmit={handleSubmit} data-testid="form">
<input
type="text"
placeholder="Your Todo.."
onChange={e => setValue(e.target.value)}
value={value}
data-testid="input"
/>
</form>
);
};

我想测试传入的 handleSubmit 属性是否会被执行。所以我设置了这个测试:

it("should call the passed in onSubmit function", () => {
const mockFn = jest.fn();

const { getByTestId } = render(
<TodoHeader handleSubmit={mockFn} />
);
const form = getByTestId("form");
fireEvent.submit(form);
// This will fail (did not get executed)
expect(mockFn).toHaveBeenCalled();
});

和react hooks有关系吗?我也尝试重新渲染它,但结果相同。我不知道为什么这不会通过。错误信息是:

Expected mock function to have been called, but it was not called.

这里有一个代码框,如果你想玩的话:

https://codesandbox.io/s/ypok50n709(TodoHeader.jsTodoHeader.test.js)

最佳答案

看起来这是一个简单的问题,cleanup 实际上并没有在 afterEach 中被调用。这意味着在第二次测试期间在 document 中呈现了两个 form 元素,并且 getByTestId 返回第一个。

改变

afterEach(() => cleanup)

要么

afterEach(() => cleanup())

或者只是

afterEach(cleanup)

关于reactjs - 为什么 jest mock 函数没有在我的 react 测试库测试中执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54579077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com