reactjs - 酶中的接头是什么
问题描述
关于测试库的目的adapter
的任何文档。enzyme
import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
configure({ adapter: new Adapter() });
解决方案
关于测试库的目的
adapter
的任何文档。enzyme
最接近的是说“您需要安装酶以及与您正在使用的反应版本(或其他 UI 组件库)相对应的适配器”。
文档大多只是解释如何配置一个adapter
并没有真正谈论它的目的。
酶中的接头是什么
简洁版本
无论您使用的是什么版本,API 都是相同的,但是如何渲染enzyme
以及与渲染的内容交互取决于版本。React
React
React
adapter
抽象出任何基于版本更改的内容,因此React
核心enzyme
代码可以保持不变。
详细版
mount
并且shallow
都从enzyme
. 让我们专注于mount
。
mount
是一个只返回一个新ReactWrapper
的函数。
ReactWrapper
为熟悉的包装对象提供instance
, setState
,find
等。
React
无论您使用哪个版本,所有这些功能的实现都是相同的......
...但是由于React
多年来它本身已经发生了变化,任何基于React
版本而变化的实现细节都被一个适配器抽象出来了。
通过调用来检索适配器getAdapter
,第一次使用它是验证传递给的节点mount
,然后创建renderer
实际呈现节点的。
对于被路由到和内部的enzyme-adapter-react-16.3
调用,您可以看到熟悉的调用,您传递的内容实际上是使用v16 语法呈现的。createRenderer
this.createMountRenderer
createMountRenderer
ReactDOM.render
React
getAdapter
在ReactWrapper.js中搜索显示,到处adapter
都是用于抽象出在使用时根据React
版本更改的功能mount
......
...并getAdapter
在ShallowWrapper.js中搜索显示adapter
用于抽象出React
在使用shallow
.
推荐阅读
- reactjs - 调度未定义/存储未在操作中定义
- python - 安装 pip autopep8 失败,语法无效?
- javascript - 我可以使用 Sublime Text 或 Atom.io 等代码编辑器将 CSS、HTML 和 JAVASCRIPT 放在一个文件中吗?谢谢
- node.js - 在外部硬盘驱动器上安装 node.js/npm (Mac OS Mojave)
- c# - 我得到一个 System.IndexOutOfRangeException
- sql - 多对多关系的全文搜索
- node.js - 分类命令类型
- yql - 是否可以通过嵌套属性值或对象数组查询对象过滤?
- jira - JIRA 7.3.5 的 REST API
- django - Django 过滤来自不同模型的对象