Reactjs 如何在react测试库中测试单选按钮(用户可以选择其他单选按钮)

Reactjs 如何在react测试库中测试单选按钮(用户可以选择其他单选按钮),reactjs,jestjs,react-testing-library,Reactjs,Jestjs,React Testing Library,我是react的新手,在react中编写测试用例。我有两个单选按钮(IPV4和IPV6)。我想测试用户是否可以选择其他单选按钮。我不知道在单选按钮上应用哪个事件侦听器,是更改事件还是单击事件 我把我的问题分为两部分:1)我正在检查我是否可以选择或取消选择一个单选按钮2)我是否可以选择另一个单选按钮。我的第一部分不及格,所以请帮助我。这是我的代码和测试用例 从“React”导入React 从“LookingGlass/常量”导入常量 从“LookingGlass/common/components

我是react的新手,在react中编写测试用例。我有两个单选按钮(IPV4和IPV6)。我想测试用户是否可以选择其他单选按钮。我不知道在单选按钮上应用哪个事件侦听器,是更改事件还是单击事件

我把我的问题分为两部分:1)我正在检查我是否可以选择或取消选择一个单选按钮2)我是否可以选择另一个单选按钮。我的第一部分不及格,所以请帮助我。这是我的代码和测试用例

从“React”导入React
从“LookingGlass/常量”导入常量
从“LookingGlass/common/components”导入{Label,RadioButton}
导出常量componentTestId='SelectorIPVersion'
导出默认函数SelectorIPVersion(props={}){
const{checkedVersion,onChange,disabled}=props
常量{choices,groupName,label}=constants.SelectorIPVersion
常数变化=(e)=>{
onChange&&onChange(e.target.value)
}
让selectorChoices=choices.map((c)=>{
返回(
)
})
返回(
{selectorChoices}
)
}
以下是我的测试用例: 在这里,我试图选择和取消选择单选按钮,但这是给我的错误,所以我如何才能检查用户可以选择其他选项或不

constrendercomponent=(props)=>render()
测试('验证用户是否可以选择其他版本',()=>{
const{getByRole,debug}=renderComponent({checkedVersion:'ipv4'})
const radio=getByRole('radio',{name:'IPv4'})
expect(收音机).toBeChecked()
调试(无线电)
fireEvent.单击(收音机)
expect(收音机).not.toBeChecked()
})
错误输出:

Received element is  checked:
      <input class="hidden" id="ipv4" name="ipVersion" readonly="" tabindex="0" type="radio" value="ipv4" checked=""/>
已选中接收的元素:
调试IPV4单选按钮时,这是输出: ● 控制台

console.log node_modules/@testing-library/react/dist/pure.js:94
  <input
    checked=""
    class="hidden"
    id="ipv4"
    name="ipVersion"
    readonly=""
    tabindex="0"
    type="radio"
    value="ipv4"
  />
console.log node_modules/@testing library/react/dist/pure.js:94
当我没有通过checkedVersion时,不会选中“ipv4”作为道具单选按钮


我哪里错了。是对还是错?

单选按钮用于分组,因此当单击其中一个按钮时,将取消选择当前选定的按钮。要测试是否取消选择了单选按钮,只需选择另一个单选按钮

test('验证用户是否可以选择其他版本',()=>{
const{getByRole}=renderComponent({checkedVersion:'ipv4'})
const ipv4Radio=getByRole('radio',{name:'IPv4'})
const ipv6Radio=getByRole('radio',{name:'IPv6'})
expect(ipv4Radio).toBeChecked()
fireEvent.单击(IPV6收音机)
expect(ipv4Radio).not.toBeChecked()
expect(ipv6Radio).toBeChecked()
})

然而,作为一个测试,这并没有带来太多的价值,因为您只是测试单选按钮是否按预期工作(我们已经知道它们确实如此)。您应该专注于测试这些按钮的逻辑。

您能澄清一下您要测试的是什么吗?为什么要触发
fireEvent。在
IPv4
单选按钮上更改
?我想测试单选按钮(IPv4和IPv6),但给出了错误:expect(元素)。not.toBeChecked()已检查接收的元素:您确定要在未选择的收音机(本例中为IPv6收音机)上触发单击事件吗?是,这是我面临的问题