首页 > 解决方案 > 酶中的接头是什么

问题描述

关于测试库的目的adapter的任何文档。enzyme

import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';

configure({ adapter: new Adapter() });

标签: reactjsjestjsenzymereactjs-testutils

解决方案


关于测试库的目的adapter的任何文档。enzyme

最接近的是说“您需要安装酶以及与您正在使用的反应版本(或其他 UI 组件库)相对应的适配器”

文档大多只是解释如何配置一个adapter并没有真正谈论它的目的。


酶中的接头是什么


简洁版本

无论您使用的是什么版本,API 都是相同的,但是如何渲染enzyme以及与渲染的内容交互取决于版本。ReactReactReact

adapter抽象出任何基于版本更改的内容,因此React核心enzyme代码可以保持不变。


详细版

mount并且shallowenzyme. 让我们专注于mount

mount是一个只返回一个新ReactWrapper的函数。

ReactWrapper为熟悉的包装对象提供instance, setState,find等。

React无论您使用哪个版本,所有这些功能的实现都是相同的......

...但是由于React多年来它本身已经发生了变化,任何基于React版本而变化的实现细节都被一个适配器抽象出来了。

通过调用来检索适配器getAdapter,第一次使用它是验证传递给的节点mount,然后创建renderer实际呈现节点的

对于被路由到和内部的enzyme-adapter-react-16.3调用,您可以看到熟悉的调用,您传递的内容实际上是使用v16 语法呈现的。createRendererthis.createMountRenderercreateMountRendererReactDOM.renderReact


getAdapterReactWrapper.js中搜索显示,到处adapter都是用于抽象出在使用时根据React版​​本更改的功能mount......

...并getAdapterShallowWrapper.js中搜索显示adapter用于抽象出React在使用shallow.


推荐阅读