Javascript 为什么可以';我对返回enzymejs中div列表的组件调用setProps()吗?

Javascript 为什么可以';我对返回enzymejs中div列表的组件调用setProps()吗?,javascript,reactjs,jestjs,enzyme,Javascript,Reactjs,Jestjs,Enzyme,我在理解setProps如何在enzymejs库中工作时遇到了一个问题 从一个例子开始: const CompA = (props) => { return props.listOfNumbers.map((number) => <div>{number}</div>); }; it("Test CompA", () => { const wrapper = shallow(<CompA listOfNumbers={[1]}/&

我在理解
setProps
如何在enzymejs库中工作时遇到了一个问题

从一个例子开始:

const CompA = (props) => {
    return props.listOfNumbers.map((number) => <div>{number}</div>);
};

it("Test CompA", () => {
    const wrapper = shallow(<CompA listOfNumbers={[1]}/>);  // -> (Debug log) ShallowWrapper {length: 1}
    wrapper.setProps({listOfNumbers: [1, 2]});              // -> (Debug log) ShallowWrapper {length: 2}
    wrapper.setProps({listOfNumbers: [1, 2, 3]}); // Enzyme error:  Method “rerender” is meant to be run on 1 node. 2 found instead.
});
const CompA=(道具)=>{
返回props.listOfNumbers.map((number)=>{number});
};
it(“测试公司”,()=>{
const wrapper=shallow();//->(调试日志)shallowRapper{length:1}
setProps({listofNumber:[1,2]});//->(调试日志)ShallowRapper{length:2}
wrapper.setProps({listofNumber:[1,2,3]});//错误:方法“rerender”将在1个节点上运行。改为找到2个。
});
来自enzymejs文档

setProps:设置根组件的道具并重新渲染的方法。

因此,我假设根组件是在
shallowRapper
函数返回的
shallowRapper
中检查的。 而且,如果我正确理解了上述错误,它会抱怨我试图在一个包含节点列表而不是节点的包装器上调用
setProps

但是,我的困惑是,我是否应该能够在
CompA
上调用
setProps
并测试它的渲染函数的输出,不管输出是什么


我的印象是,只有当被测组件从其渲染函数返回一个节点时,我才能调用
setProps
。而一个节点就是enzyme doc中提到的根组件

您应该将返回的数组包装在
中。解决了这个问题。谢谢@AdrianoRepetti。但是,这仍然让我感到困惑
setProps
用于设置被测组件的道具,在本例中为
CompA
。但是,这取决于CompA所呈现的数据类型。对于
setProps
,需要是一个节点,我仍然感觉这样做是错误的。你是对的,从React 16可以返回一个数组,但(至少在我的经验中)Enzyme确实没有跟上。你应该将返回的数组包装在
中。解决了这个问题。谢谢@AdrianoRepetti。但是,这仍然让我感到困惑
setProps
用于设置被测组件的道具,在本例中为
CompA
。但是,这取决于CompA所呈现的数据类型。对于
setProps
,需要是一个节点,我仍然觉得这样做是错误的。你是对的,从React 16可以返回一个数组,但(至少在我的经验中)Enzyme确实没有跟上。