如何在反应测试库中测试单选按钮(用户可以select其他单选按钮)
how to test radio button in react testing library(User can select other radio button)
我是 React 新手,在 React 中编写测试用例。我有两个单选按钮(IPV4 和 IPV6)。我想测试用户是否可以 select 另一个单选按钮。我不知道在单选按钮上应用哪个事件监听器,是更改事件还是点击事件?
我将我的问题分为两部分:1) 我正在检查我是否可以 select 或取消 select 一个单选按钮 2) 我可以 select 另一个单选按钮按钮与否。我只在第一部分失败了,所以请帮助我。这是我的代码和测试用例。
import React from 'react'
import constants from 'LookingGlass/constants'
import { Label, RadioButton } from 'LookingGlass/common/components'
export const componentTestId = 'SelectorIPVersion'
export default function SelectorIPVersion(props = {}) {
const { checkedVersion, onChange, disabled } = props
const { choices, groupName, label } = constants.SelectorIPVersion
const _onChange = (e) => {
onChange && onChange(e.target.value)
}
let selectorChoices = choices.map((c) => {
return (
<RadioButton
key={c.value}
id={c.value}
name={groupName}
value={c.value}
label={c.label}
checked={c.value === checkedVersion}
onChange={_onChange}
disabled={disabled}
/>
)
})
return (
<div data-testid={componentTestId}>
<Label text={label} />
{selectorChoices}
</div>
)
}
这是我的测试用例:
我在这里尝试 select 和 deselect 单选按钮,但这给了我错误,所以我如何检查用户是否可以 select 另一个选项?
const renderComponent = (props) => render(<SelectorIPVersion {...props} />)
test('Verify that user can select another version', () => {
const { getByRole, debug } = renderComponent({ checkedVersion: 'ipv4' })
const radio = getByRole('radio', { name: 'IPv4' })
expect(radio).toBeChecked()
debug(radio)
fireEvent.click(radio)
expect(radio).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"
/>
当我没有通过 checkedVersion: 'ipv4' 因为道具单选按钮没有被选中。
我哪里错了。是对还是错?
单选按钮应成组使用,因此当单击其中一个按钮时,select 将变为当前 select 的按钮。要测试单选按钮是否被删除select,只需 select 另一个按钮。
test('Verify that user can select another version', () => {
const { getByRole } = renderComponent({ checkedVersion: 'ipv4' })
const ipv4Radio = getByRole('radio', { name: 'IPv4' })
const ipv6Radio = getByRole('radio', { name: 'IPv6' })
expect(ipv4Radio).toBeChecked()
fireEvent.click(ipv6Radio)
expect(ipv4Radio).not.toBeChecked()
expect(ipv6Radio).toBeChecked()
})
但是,作为测试,这并没有多大价值,因为您只是在测试单选按钮是否按预期工作(我们已经知道它们可以工作)。您应该专注于围绕这些按钮测试您自己的逻辑。
我是 React 新手,在 React 中编写测试用例。我有两个单选按钮(IPV4 和 IPV6)。我想测试用户是否可以 select 另一个单选按钮。我不知道在单选按钮上应用哪个事件监听器,是更改事件还是点击事件?
我将我的问题分为两部分:1) 我正在检查我是否可以 select 或取消 select 一个单选按钮 2) 我可以 select 另一个单选按钮按钮与否。我只在第一部分失败了,所以请帮助我。这是我的代码和测试用例。
import React from 'react'
import constants from 'LookingGlass/constants'
import { Label, RadioButton } from 'LookingGlass/common/components'
export const componentTestId = 'SelectorIPVersion'
export default function SelectorIPVersion(props = {}) {
const { checkedVersion, onChange, disabled } = props
const { choices, groupName, label } = constants.SelectorIPVersion
const _onChange = (e) => {
onChange && onChange(e.target.value)
}
let selectorChoices = choices.map((c) => {
return (
<RadioButton
key={c.value}
id={c.value}
name={groupName}
value={c.value}
label={c.label}
checked={c.value === checkedVersion}
onChange={_onChange}
disabled={disabled}
/>
)
})
return (
<div data-testid={componentTestId}>
<Label text={label} />
{selectorChoices}
</div>
)
}
这是我的测试用例: 我在这里尝试 select 和 deselect 单选按钮,但这给了我错误,所以我如何检查用户是否可以 select 另一个选项?
const renderComponent = (props) => render(<SelectorIPVersion {...props} />)
test('Verify that user can select another version', () => {
const { getByRole, debug } = renderComponent({ checkedVersion: 'ipv4' })
const radio = getByRole('radio', { name: 'IPv4' })
expect(radio).toBeChecked()
debug(radio)
fireEvent.click(radio)
expect(radio).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"
/>
当我没有通过 checkedVersion: 'ipv4' 因为道具单选按钮没有被选中。
我哪里错了。是对还是错?
单选按钮应成组使用,因此当单击其中一个按钮时,select 将变为当前 select 的按钮。要测试单选按钮是否被删除select,只需 select 另一个按钮。
test('Verify that user can select another version', () => {
const { getByRole } = renderComponent({ checkedVersion: 'ipv4' })
const ipv4Radio = getByRole('radio', { name: 'IPv4' })
const ipv6Radio = getByRole('radio', { name: 'IPv6' })
expect(ipv4Radio).toBeChecked()
fireEvent.click(ipv6Radio)
expect(ipv4Radio).not.toBeChecked()
expect(ipv6Radio).toBeChecked()
})
但是,作为测试,这并没有多大价值,因为您只是在测试单选按钮是否按预期工作(我们已经知道它们可以工作)。您应该专注于围绕这些按钮测试您自己的逻辑。