贡献指南

欢迎贡献,并深表感谢!每一份努力都至关重要,并且会给予应有的认可。

设置你的环境

在将 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

shallowmount 之间共享的功能的测试

方法“foo”的测试存储在 packages/enzyme-test-suite/test/shared/methods/foo 中。文件默认导出一个接收注入对象参数的函数,其中包含以下属性

  • Wrap:例如 shallowmount
  • WrapRendered:这抽象了 shallowmount 之间的差异 - 例如,Foo 周围的浅层包装器的根是 Foo 渲染的内容,而 Foo 周围的挂载包装器的根是 Foo 本身。因此,此函数生成一个包装器,用于包装 Foo 渲染的内容,无论使用哪种 Wrap 方法。
  • Wrapper:例如 ShallowWrapperReactWrapper
  • 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.1enzyme-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

当任何源文件发生更改时,浏览器将自动刷新。

请求提取指南

在从分叉仓库提交请求提取之前,请检查它是否符合这些指南

  1. 如果请求提取修复了一个错误,它应该包括在没有更改的情况下失败,并且在有更改的情况下通过的测试。
  2. 如果请求提取添加了功能,则文档应作为同一 PR 的一部分进行更新。
  3. 请求提取应适用于 React 15、React 0.14 和 React 0.13。当您推送 PR 时,CI 服务器应自动在所有版本中运行测试,但如果您想在本地检查,您可以这样做(请参见上文)。
  4. 请在提交之前重新设置基准并解决所有冲突。