我正在尝试使用React Testing Library测试我的Modal
组件。Modal在React Portal内部呈现。现在,当我尝试将Modal
与快照匹配时,快照呈现为空div。
test('The component should render in body when open', () => {
const {container} = render(
<Modal>
<div>My dialog content</div>
</Modal>
);
expect(container).toMatchSnapshot();
});
我得到的快照是这样的:
exports[`The component should render in body when open 1`] = `<div />`;
我见过一些变通方法,比如将{container: document.body}
作为render()
函数的第二个参数传递,但是没有一个真正起作用。
而且我不能通过container
查询任何元素,它总是返回null
。
const dialog = container.querySelector(".modal");
console.log(dialog); // null
2条答案
按热度按时间eeq64g8w1#
首先,您应该标识门户的容器元素,即添加到主体中以保存门户内容的"根"节点。然后,您应该手动将其追加/添加到DOM中,以便您的呈现方法知道在何处呈现Modal组件。然后,您应该使用baseElement属性而不是容器。因为门户元素呈现在正文中,然后根据快照测试baseElement(实际的门户元素)的firstChild。
这对我很有效:
ugmeyewa2#
我最终通过快照
baseElement
而不是container
使其工作。两者都是render()
函数返回的属性。