开玩笑地测试 React 组件的 child 是否实际上是提供的 child

Test if a react component's child is in fact the provided child with jest

我有一个 react "wrapper" 组件应该包裹它的 child。这是相关部分:

export class Wrapper extends Component {   
    render(){
        return (<div>{ this.props.children }</div>);
    }
}

我正在尝试使用 jest 来测试呈现的 child 是否确实是提供给此包装器的内容。 这是我尝试过的;

describe('SwapWrapper', () => {
    it('contains its child', () => {
        const potentialChild = (<AMockedComponent/>);
        const wrapper = TestUtils.renderIntoDocument(
            <Wrapper>{potentialChild}</Wrapper>
        );
        const realChild = TestUtils.findRenderedComponentWithType(wrapper, AMockedComponent);
        expect(realChild).toBe(potentialChild); // Obviously does not work.
    });
});

显然不行。 realChild is a component instance while potentialChild is a component element.

目前,我唯一能做的就是用 属性 创建 potentialChild 并检查 realChild 是否包含这个 属性。

是否有更有效的方法来检查 realChild 是否实际上对应于已提供的 potentialChild

我找到了使用 ref 的解决方案。 react元素的ref属性会在实例化时随创建的实例回调

describe('SwapWrapper', () => {
    it('contains its child', () => {
        const ref = jest.fn();
        const potentialChild = (<AMockedComponent ref={ref}/>);
        const wrapper = TestUtils.renderIntoDocument(
            <Wrapper>{potentialChild}</Wrapper>
        );
        const realChild = TestUtils.findRenderedComponentWithType(wrapper, AMockedComponent);
        expect(ref).toBeCalledWith(realChild);
    });
});