3

我在我的应用程序中使用了一些动画,所有动画都依赖于 refs(我使用的是 GSAP)。大多数被测试的元素都位于其他 React 组件中;所以,我已经forwardRef在我的组件中设置了将 ref 传递给所需的元素。

现在,我想使用 Jest 和 Enzyme 或 React Test Renderer 测试这些 refs,但我无法使用这两个库来实现它。这是我当前的实现:

it('passes refs to the container component', () => {
    const ref = React.createRef();
    const div = document.createElement('div');
    ReactDOM.render(<Row ref={ref} />, div);

    const element = div.querySelector('div');
    expect(element).toBe(ref.current);
});

使用ReactTestRenderer.createorenzyme.render进行完整渲染不起作用,因为 refs 是空的。然后,我找到enzyme.mount了类似于ReactDOM.render;的函数。所以,决定使用它:

it('passes refs to the container component', () => {
    const ref = React.createRef();
    const wrapper = mount(<Row ref={ref} />);
    const div = wrapper.find('div').first().getDOMNode();
    expect(div).toBe(ref.current);
});

此测试未通过,因为由于某种原因,div返回 HTMLElement 时ref.current返回名为 WrapperComponent 的东西,而不是返回转发的元素。

创建元素并使用 ReactDOM 渲染和测试 ref 工作正常,但我想知道是否有办法为此目的使用酶或反应测试渲染器(我不喜欢使用多个库进行渲染以测试不同的功能)。

我想测试 refs 的主要原因是,如果一个 ref 更改为组件中的另一个元素,所有使用该组件的 ref 的动画都会中断。所以,我想指定使用 refs 时访问哪些元素。

4

1 回答 1

0

尝试使用ref.current.getDomNode().

于 2020-05-09T07:30:57.350 回答