gpt4 book ai didi

javascript - 按下选项卡按钮时如何测试哪个输入具有焦点

转载 作者:行者123 更新时间:2023-12-04 13:11:40 25 4
gpt4 key购买 nike

我正在构建一个 React 自动完成组件并使用 Jest 和 React-testing-library 对其进行测试。
我有两个输入。当 input1(具有自动完成功能)成为焦点时,单击 Tab如果 input1 不为空,按钮应该自动填充 input1 与文本,如果 input1 为空,则将焦点移至 input2(这是表单的默认行为)。
form.jsx

    const onKeyDown = (e) => {
if(e.key === 'Tab' && e.target.value !== '') {
setInput1Text('some-autocomplete-text');
e.preventDefault(); //prevent focus from moving to the next input(input2)
}
};
form.test.jsx
    test('pressing Tab button should move focus to input2 as input1 is empty', () => {
const input1 = container.getElementsByTagName('input')[0];
const input2 = container.getElementsByTagName('input')[1];

fireEvent.change(input1, { target: { value: '' } });
fireEvent.keyDown(input1, { key: 'Tab' });

expect(input2).toBe(document.activeElement) //failing, activeElement returns <Body>
// OR
expect(input2).toHaveFocus(); //failing as well.
});
目前,在我的测试中, document.activeElement不断返回 Body元素,但我希望它返回两个输入中的任何一个。还有 expect(input2).toHaveFocus()失败。
如何测试焦点已从 input1 移动到 input2?

最佳答案

我最终使用了@testing-library/user-event 库。
我替换了fireEventuserEvent对于Tab按。
我的代码现在看起来像这样:

    import userEvent from '@testing-library/user-event';

test('pressing Tab button should move focus to input2 as input1 is empty', () => {
const input1 = container.getElementsByTagName('input')[0];
const input2 = container.getElementsByTagName('input')[1];

input1.focus();
fireEvent.change(input1, { target: { value: '' } });
userEvent.tab(); //this line made it work

expect(input2).toHaveFocus(); //passing now
});
引用: https://github.com/testing-library/user-event#tabshift-focustrap

关于javascript - 按下选项卡按钮时如何测试哪个输入具有焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64492491/

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