我在我的应用程序中使用了一些动画,所有动画都依赖于 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.create
orenzyme.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 时访问哪些元素。