React - Jest - 测试 preventDefault 动作
React - Jest - Test preventDefault Action
我不知道如何测试按键事件和防止默认。测试到达代码但从未调用 preventDefault
:Received number of calls: 0
React 组件 - App.js
const onKeyDown = e => {
console.log("==== TEST REACHED HERE ====")
e.preventDefault(); // NEVER CALLED ???
};
useEffect(() => {
document.addEventListener("keydown", onKeyDown, false);
return () =>
document.removeEventListener("keydown", onKeyDown, false);
}, []);
单元测试
it("should prevent default action on key down", () => {
const { getByRole } = render(<App {...props} />);
const grid = getByRole("app");
const mockEvent = { preventDefault: jest.fn() };
fireEvent.keyDown(grid, mockEvent);
expect(mockEvent.preventDefault).toHaveBeenCalledTimes(1);
});
看来你can not mock preventDefault
属性的事件带有react测试库
在挂钩下,fireEvent
正在调用 dispatchEvent
,因此您可以利用以下事实:如果事件被取消,则调用 event.preventDefault
returns false:
it("should prevent default action on key down", () => {
const { getByRole } = render(<App {...props} />);
const grid = getByRole("app");
const isPrevented = fireEvent.keyDown(grid);
expect(isPrevented).toBe(false);
});
我找到了比接受的答案更明确的方法。您可以使用 'react-testing-library' 中的 createEvent
在触发之前手动创建事件。
it("should prevent default action on key down", () => {
const { getByRole } = render(<App {...props} />);
const grid = getByRole("app");
const keyDownEvent = createEvent.keyDown(grid);
fireEvent(grid, keyDownEvent);
expect(keyDownEvent.defaultPrevented).toBe(true);
});
我认为这个方法可以重复用于测试 defaultPrevented 之外的其他东西!
我不知道如何测试按键事件和防止默认。测试到达代码但从未调用 preventDefault
:Received number of calls: 0
React 组件 - App.js
const onKeyDown = e => {
console.log("==== TEST REACHED HERE ====")
e.preventDefault(); // NEVER CALLED ???
};
useEffect(() => {
document.addEventListener("keydown", onKeyDown, false);
return () =>
document.removeEventListener("keydown", onKeyDown, false);
}, []);
单元测试
it("should prevent default action on key down", () => {
const { getByRole } = render(<App {...props} />);
const grid = getByRole("app");
const mockEvent = { preventDefault: jest.fn() };
fireEvent.keyDown(grid, mockEvent);
expect(mockEvent.preventDefault).toHaveBeenCalledTimes(1);
});
看来你can not mock preventDefault
属性的事件带有react测试库
在挂钩下,fireEvent
正在调用 dispatchEvent
,因此您可以利用以下事实:如果事件被取消,则调用 event.preventDefault
returns false:
it("should prevent default action on key down", () => {
const { getByRole } = render(<App {...props} />);
const grid = getByRole("app");
const isPrevented = fireEvent.keyDown(grid);
expect(isPrevented).toBe(false);
});
我找到了比接受的答案更明确的方法。您可以使用 'react-testing-library' 中的 createEvent
在触发之前手动创建事件。
it("should prevent default action on key down", () => {
const { getByRole } = render(<App {...props} />);
const grid = getByRole("app");
const keyDownEvent = createEvent.keyDown(grid);
fireEvent(grid, keyDownEvent);
expect(keyDownEvent.defaultPrevented).toBe(true);
});
我认为这个方法可以重复用于测试 defaultPrevented 之外的其他东西!