gpt4 book ai didi

reactjs - 如何使用react-testing-library触发react-select组件上的更改事件?

转载 作者:行者123 更新时间:2023-12-03 13:23:51 25 4
gpt4 key购买 nike

鉴于我无法直接使用 react-testing-library 测试内部结构,我将如何测试使用 react-select 的组件?例如,如果我有一个基于 react-select 值的条件渲染,它不会呈现传统的 <select/> ,我还能触发更改吗?

import React, { useState } from "react";
import Select from "react-select";

const options = [
{ value: "First", label: "First" },
{ value: "Second", label: "Second" },
{ value: "Third", label: "Third" },
];

function TestApp() {
const [option, setOption] = useState(null);
return (
<div>
<label htmlFor="option-select">Select Option</label>
<Select
value={option}
options={options}
onChange={option => setOption(option)}
/>
{option && <div>{option.label}</div>}
</div>
);
}

export default TestApp;

我什至不确定我应该查询什么。是隐藏输入吗?

最佳答案

我的团队在我们的项目中有一个测试实用程序,可以让我们在花费太多时间试图弄清楚如何正确执行此操作后轻松选择一个项目。在此分享,希望对其他人有帮助。

这不依赖于任何 React Select 内部结构或模拟,但确实需要您设置 <label>其中有 for链接到 React Select 输入。它使用标签来选择给定的选择值,就像用户在真实页面上一样。

const KEY_DOWN = 40

// Select an item from a React Select dropdown given a label and
// choice label you wish to pick.
export async function selectItem(
container: HTMLElement,
label: string,
choice: string
): Promise<void> {
// Focus and enable the dropdown of options.
fireEvent.focus(getByLabelText(container, label))
fireEvent.keyDown(getByLabelText(container, label), {
keyCode: KEY_DOWN,
})

// Wait for the dropdown of options to be drawn.
await findByText(container, choice)

// Select the item we care about.
fireEvent.click(getByText(container, choice))

// Wait for your choice to be set as the input value.
await findByDisplayValue(container, choice)
}

可以这样使用:

it('selects an item', async () => {
const { container } = render(<MyComponent/>)

await selectItem(container, 'My label', 'value')
})

关于reactjs - 如何使用react-testing-library触发react-select组件上的更改事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54848370/

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