Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs “酶模拟更改事件不工作”复选框_Reactjs_Testing_Jestjs_Enzyme - Fatal编程技术网

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
源代码: