贡献指南
欢迎贡献,并深表感谢!每一份努力都至关重要,并且会给予应有的认可。
设置你的环境
在将 enzyme 分叉到自己的 github 组织后,执行以下步骤来开始
# clone your fork to your local machine
git clone https://github.com/enzymejs/enzyme.git
# step into local repo
cd enzyme
# install dependencies (use `react 13` if you want to use React 0.13)
npm install
# install react version
# accepts `13` for v0.13, `14` for v0.14, and for versions 15+,
# accepts either a major (`15`, `16`) or a minor (`15.4`, `16.8`)
npm run react 16
在 React 16、React 15、React 0.14 和 React 0.13 之间切换
# switch to React 0.13
npm run react 13
# switch to React 0.14
npm run react 14
# switch to React 15
npm run react 15
# switch to React 16
npm run react 16
也可以指定特定版本
# switch to React 16.5
npm run react 16.5
运行测试
测试套件在已构建的 Enzyme 上运行。
# build Enzyme locally before testing
npm run build
# run tests on whatever version of React is currently installed
npm test
# run tests on all supported versions of React
npm run test:all
如果你正在积极开发,则始终需要使用最新更改构建 Enzyme。
为此,建议的工作流是在单独的终端中让构建和测试监视更改。这应该为你提供~实时反馈
# build Enzyme locally upon save
npm run build:watch
# faster feedback for TDD
npm run test:watch
shallow
和 mount
之间共享的功能的测试
方法“foo”的测试存储在 packages/enzyme-test-suite/test/shared/methods/foo
中。文件默认导出一个接收注入对象参数的函数,其中包含以下属性
Wrap
:例如shallow
、mount
WrapRendered
:这抽象了shallow
和mount
之间的差异 - 例如,Foo
周围的浅层包装器的根是Foo
渲染的内容,而Foo
周围的挂载包装器的根是Foo
本身。因此,此函数生成一个包装器,用于包装Foo
渲染的内容,无论使用哪种Wrap
方法。Wrapper
:例如ShallowWrapper
、ReactWrapper
WrapperName
:例如"ShallowWrapper"
、"ReactWrapper"
isShallow
:如果为shallow
,则为 true。注意:需要使用它是一种代码异味,请避免。isMount
:如果为mount
,则为 true。注意:需要使用它是一种代码异味,请避免。makeDOMElement
:在mount
中,创建一个真正的 DOM 元素;在shallow
中,创建一个模拟对象。这些测试通过 ReactWrapper 和 ShallowWrapper 测试文件中的
describeMethods
调用中的显式列表运行。如果你为共享方法添加了一个新的测试文件,则需要将它的名称添加到这两个调用中。
样式和 linting
此代码库遵循 Airbnb Styleguide,并使用 ESLint 强制执行。
与测试套件一样,除非在已构建的 Enzyme 上运行,否则 linter 将不会完全通过。这是因为 ESLint import/*
规则依赖于在文件系统中查找目标文件(除非已构建,否则不存在)。
建议你在处理此代码库时为你的编辑器安装一个 ESLint 插件,但是你始终可以通过运行以下命令来检查源代码是否兼容
# build Enzyme locally before linting
npm run build
npm run lint
发布
Enzyme 使用 lerna 来构建其存储库,并有多个包要从这个存储库中发布。我们使用 lerna 的“独立”模式,这意味着存储库中每个包的版本都是独立进行版本控制的。
我们正在等待 此问题 得到修复,以便在补丁更新中不会更新 peerDependencies
。
在此问题得到修复之前,我们将手动发布每个包,而不是使用 lerna publish
。为此,我们将
对于 enzyme
# ... update version in enzyme/package.json, make changes to CHANGELOG, etc.
cd packages/enzyme
git commit -m v{version}
git tag -a -m v{version}
git push --follow-tags
npm publish
对于其他包
# ... update version in {package}/package.json, make changes to CHANGELOG, etc.
cd packages/{package}
git commit -m "{package}: v{version}"
git tag -a -m "{package}: v{version}"
git push --follow-tags
npm publish
一旦我们能够使用 lerna publish
,流程如下
默认情况下,Lerna 仅发布自上次发布以来已更改的包。它还将为每个版本创建一个标记提交。
要发布,请运行
lerna publish -m "{tag name}"
标签名称由 -m
CLI 选项确定。如果 enzyme
是具有更新的包之一,我们默认仅使用该版本作为标签名称。例如,在发布 enzyme@3.1.1
和 enzyme-adapter-react-16@1.2.3
时,我们将运行
lerna publish -m "v3.1.1"
如果 enzyme
不是 正在更新的包之一,请使用其他包的名称和版本
lerna publish -m "enzyme-adapter-react-16: v1.2.3"
lerna publish
命令将显示交互式提示,询问每个包独立使用哪个版本。只需选择任何
构建文档
在本地构建文档非常简单。首先执行以下命令
npm run docs:watch
之后,你可以将浏览器打开到指定的端口(通常为 https://127.0.0.1:4000 )
当任何源文件发生更改时,浏览器将自动刷新。
请求提取指南
在从分叉仓库提交请求提取之前,请检查它是否符合这些指南
- 如果请求提取修复了一个错误,它应该包括在没有更改的情况下失败,并且在有更改的情况下通过的测试。
- 如果请求提取添加了功能,则文档应作为同一 PR 的一部分进行更新。
- 请求提取应适用于 React 15、React 0.14 和 React 0.13。当您推送 PR 时,CI 服务器应自动在所有版本中运行测试,但如果您想在本地检查,您可以这样做(请参见上文)。
- 请在提交之前重新设置基准并解决所有冲突。