Reactjs “酶模拟更改事件不工作”复选框
我试图在我的一个组件上编写一个单元测试。但我的复选框在模拟更改事件后不会更改 我的组成部分:Reactjs “酶模拟更改事件不工作”复选框,reactjs,testing,jestjs,enzyme,Reactjs,Testing,Jestjs,Enzyme,我试图在我的一个组件上编写一个单元测试。但我的复选框在模拟更改事件后不会更改 我的组成部分: const Checkbox = ({ label, onChange, id, isChecked }) => { return ( <> <input type="checkbox" name="node" id={"checkbox-" + id}
const Checkbox = ({ label, onChange, id, isChecked }) => {
return (
<>
<input type="checkbox"
name="node"
id={"checkbox-" + id}
onChange={onChange}
checked={isChecked}
/>
<label className="treeview__level" htmlFor={"checkbox-" + id}>{label}</label>
</>
)
const Checkbox=({label,onChange,id,isChecked})=>{
返回(
{label}
)
我的测试:
it('check if checkbox checked ', () => {
const testState = { isChecked: false },
checkboxWrapper = shallow(
<Checkbox label= ""
id= "0"
onChange={(e) => {
testState[e.target.name] = e.target.value;
}}
isChecked= {testState.isChecked}
/>
),
input = checkboxWrapper.find('input').at(0);
input.simulate('change', { target: { name: 'checked', value: true } });
expect(input.props().checked).toBe(true);
})
it('check if checked',()=>{
const testState={isChecked:false},
checkboxWrapper=浅(
{
testState[e.target.name]=e.target.value;
}}
isChecked={testState.isChecked}
/>
),
input=checkboxWrapper.find('input')。位于(0);
模拟('change',{target:{name:'checked',value:true});
expect(input.props().checked).toBe(true);
})
它按预期工作。在对组件进行浅层渲染时,isChecked
道具的值为false
(testState.isChecked
)即使您模拟了change
事件。您刚刚更改了testState
属性的值。该组件不会重新渲染。这就是为什么input.props()
您可能希望使用更新组件的道具
例如。
index.tsx
:
从“React”导入React;
导出常量复选框=({label,onChange,id,isChecked})=>{
log('isChecked:',isChecked);
返回(
{label}
);
};
index.test.tsx
:
从“/”导入{Checkbox};
从“React”导入React;
从“酶”导入{shall};
描述('60708551',()=>{
它('check if checked',()=>{
const testState={isChecked:false};
常量checkboxWrapper=浅(
{
testState[e.target.name]=e.target.value;
}}
isChecked={testState.isChecked}
/>,
);
const input=checkboxWrapper.find('input');
simulate('change',{target:{name:'isChecked',value:true});
expect(testState.isChecked).toBeTruthy();
setProps({isChecked:testState.isChecked});
expect(checkboxWrapper.find('input').props().checked).toBeTruthy();
});
});
单元测试结果:
PASS stackoverflow/60708551/index.test.tsx(13.81s)
60708551
✓ 检查是否选中复选框(43毫秒)
console.log stackoverflow/60708551/index.tsx:4
被检查:错误
console.log stackoverflow/60708551/index.tsx:4
我被检查过:是的
测试套件:1个通过,共1个
测试:1项通过,共1项
快照:共0个
时间:15.316s
源代码: