测试复选框是否有 defaultChecked 时如何检查复选框?
How to check checkbox when testing if it has defaultChecked?
这是我正在努力实现的演示:link
问题是,我发现如果没有 defaultChecked 属性,我可以更改值并选中复选框,但这是遗留代码,我不能轻易将其删除,我需要它属性 那里。
我需要: e.currentTarget.checked在测试环境中实现,它实现了错误。当我删除 defaultChecked false 时它确实实现了,但我在那里需要它。
我开玩笑地使用 react-testing-library。
演示代码在这里:
export class OptionCheckbox extends React.Component {
changeHandler = e => {
console.log("onchange triggered", e.currentTarget.checked);
};
render() {
return (
<div>
<input
onChange={this.changeHandler}
defaultChecked={false}
id="test"
name="test"
type="checkbox"
/>
<label htmlFor="test">
<span />
Test
</label>
</div>
);
}
}
// TEST
test("Example test of change event", () => {
const component = renderIntoDocument(<OptionCheckbox />);
component.getByLabelText("Test").setAttribute("checked", "");
fireEvent.change(component.getByLabelText("Test"));
component.unmount();
});
解决方案是直接访问 属性,而不是通过 setAttribute method.This 将执行我想要的操作,并在 onchange 处理程序中让我 e.currentTarget.checked === true。
更新:这是针对 3.x.y 左右的旧版本库。在新版本中我不做下面描述的事情,只使用 fireEvent.click;
/* SOLUTION */
component.getByLabelText("Test").checked = true;
fireEvent.change(component.getByLabelText("Test"));
/* SOLUTION */
这是我正在努力实现的演示:link
问题是,我发现如果没有 defaultChecked 属性,我可以更改值并选中复选框,但这是遗留代码,我不能轻易将其删除,我需要它属性 那里。
我需要: e.currentTarget.checked在测试环境中实现,它实现了错误。当我删除 defaultChecked false 时它确实实现了,但我在那里需要它。
我开玩笑地使用 react-testing-library。
演示代码在这里:
export class OptionCheckbox extends React.Component {
changeHandler = e => {
console.log("onchange triggered", e.currentTarget.checked);
};
render() {
return (
<div>
<input
onChange={this.changeHandler}
defaultChecked={false}
id="test"
name="test"
type="checkbox"
/>
<label htmlFor="test">
<span />
Test
</label>
</div>
);
}
}
// TEST
test("Example test of change event", () => {
const component = renderIntoDocument(<OptionCheckbox />);
component.getByLabelText("Test").setAttribute("checked", "");
fireEvent.change(component.getByLabelText("Test"));
component.unmount();
});
解决方案是直接访问 属性,而不是通过 setAttribute method.This 将执行我想要的操作,并在 onchange 处理程序中让我 e.currentTarget.checked === true。
更新:这是针对 3.x.y 左右的旧版本库。在新版本中我不做下面描述的事情,只使用 fireEvent.click;
/* SOLUTION */
component.getByLabelText("Test").checked = true;
fireEvent.change(component.getByLabelText("Test"));
/* SOLUTION */