javascript - FireEvent.click 不触发反应测试库 - 测试设置
问题描述
我正在尝试为我构建的下拉组件编写一些测试 - 当我模拟点击 react-testing 库时,我似乎遇到了问题,它不会更新我在测试中的值。当应该作为用户单击的最新值返回时,更新的值返回为空。
仅供参考,这仅适用于浏览器,不适用于测试
test('Expect updated value to be the value of the dropdown', async () => {
const onChange = jest.fn()
const { getByText, getByTestId, getByRole } = render(
<DropDown onChange={onChange} options={['test', 'another']} />
)
const result = getByTestId('dropdown-value')
userEvent.click(getByText(/Select/))
userEvent.click(getByText(/test/))
expect(result.textContent).toBe(/test/)
})
interface DropDownProps {
onChange: React.ChangeEventHandler<HTMLSelectElement>
options: string[]
}
export const DropDown: React.FC<DropDownProps> = ({
options,
onChange,
...props
}: DropDownProps) => {
const dropdownRef = useRef<HTMLDivElement>(null)
const [isActive, setIsActive] = useState<boolean>(false)
const [dropdownValue, setDropdownValue] = useState<string>('Select')
const onClick = () => setIsActive(!isActive)
const classes = useDropdownStyles()
useEffect(() => {
const pageClickEvent = e => {
const $dropdown = dropdownRef?.current as HTMLDivElement
if (!$dropdown || $dropdown.contains(e.target)) return
setIsActive(!isActive)
}
if (isActive) {
window.addEventListener('click', pageClickEvent)
}
return () => {
window.removeEventListener('click', pageClickEvent)
}
}, [isActive])
const handleDropDownClick = e => {
const value = e.target.innerText
setDropdownValue(value)
setIsActive(false)
}
return (
<div className={classes.menuContainer}>
<button
data-testid="trigger"
onClick={onClick}
className={classes.menuTrigger}>
<span data-testid="dropdown-value">{dropdownValue}</span>
</button>
<div
ref={dropdownRef}
className={`${classes.menu} ${isActive ? classes.active : ''}`}>
<ul onClick={handleDropDownClick} className={classes.list}>
{options &&
options.map((item, idx) => (
<li key={idx} className={classes.listItem}>
{item}
</li>
))}
</ul>
</div>
</div>
)
}
我怎样才能让这个测试通过?我在这里做错了什么?
解决方案
推荐阅读
- c++ - Boost log sink - 时间戳属性和格式化程序问题
- vuejs2 - Vue test utils 正在更新组件数据但不重新渲染 dom
- angular - 在 Angular 应用程序中缓存翻译文件 6
- javascript - Mac 和移动设备中的 Chrome 日期/时间解析中断,在 windows chrome 中工作正常
- java - 在java中将原始类型数组转换为List的任何内置方法
- c++ - OpenCV WebAssembly
- pandas - 循环遍历熊猫数据框的所有元素?
- python - Visual Studio 代码将工作代码突出显示为错误
- python - 如何在 matplotlib 中更改 xticks 的旋转?
- hibernate - 带有@JoinTable 的单向@OneToMany 不更新连接表