貢献ガイド

貢献は大歓迎であり、非常に感謝します!少しでも役に立ちますし、クレジットは常に付与されます。

環境設定

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自体であるなどです。したがって、この関数は、使用されるWrapメソッドに関係なく、Fooがレンダリングするものをラップします。
  • Wrapper:例:ShallowWrapperReactWrapper
  • WrapperName:例:"ShallowWrapper""ReactWrapper"
  • isShallowshallowの場合はtrue。注:これを使用する必要がある場合はコードの臭いです。避けてください。
  • isMountmountの場合はtrue。注:これを使用する必要がある場合はコードの臭いです。避けてください。
  • makeDOMElementmountでは、実際のDOM要素を作成します。shallowでは、モックオブジェクトを作成します。

    これらのテストは、ReactWrapperとShallowWrapperのテストファイルにあるdescribeMethods呼び出しの明示的なリストを介して実行されます。共有メソッド用の新しいテストファイルを追加する場合は、その名前を両方の呼び出しに追加する必要があります。

スタイル&リンティング

このコードベースはAirbnbスタイルガイドに準拠しており、ESLintを使用して強制されています。

テストスイートと同様に、リンターはビルドされたEnzymeで実行しない限り、完全に合格しません。これは、ESLintのimport/*ルールがファイルシステム内のターゲットファイルを見つけることに依存しているためです(ビルドされない限り、そこにはありません)。

このコードベースで作業するときは、任意の選択したエディター用のESLintプラグインをインストールすることをお勧めします。ただし、次のコマンドを実行して、ソースコードが準拠しているかどうかを常に確認できます。

# build Enzyme locally before linting
npm run build

npm run lint

公開

Enzymeはlernaを使用してリポジトリを構造化し、この1つのリポジトリから公開する複数のパッケージがあります。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が更新されたパッケージの1つである場合、デフォルトではそのバージョンをタグ名として使用するだけです。たとえば、enzyme@3.1.1enzyme-adapter-react-16@1.2.3を公開するときは、次を実行します。

lerna publish -m "v3.1.1"

enzymeが更新されているパッケージの1つではない場合は、他のパッケージの名前とバージョンを使用します。

lerna publish -m "enzyme-adapter-react-16: v1.2.3"

lerna publishコマンドは、各パッケージで独立して使用するバージョンを尋ねるインタラクティブなプロンプトを表示します。いずれかを選択してください。

ドキュメントのビルド

ドキュメントをローカルでビルドするのは非常に簡単です。最初に、次のコマンドを実行します。

npm run docs:watch

この後、指定されたポート(通常はhttp://localhost:4000)でブラウザを開くことができます。

ソースファイルのいずれかが変更されると、ブラウザーは自動的に更新されます。

プルリクエストのガイドライン

フォークしたリポジトリからプルリクエストを送信する前に、次のガイドラインを満たしていることを確認してください。

  1. プルリクエストがバグを修正する場合、変更なしでは失敗し、変更ありではパスするテストを含める必要があります。
  2. プルリクエストが機能を追加する場合、同じPRの一部としてドキュメントを更新する必要があります。
  3. プルリクエストは、React 15、React 0.14、およびReact 0.13で機能する必要があります。CIサーバーはPRをプッシュすると自動的にすべてのバージョンでテストを実行する必要がありますが、ローカルで確認したい場合は(上記を参照)そうすることができます。
  4. 送信する前に、リベースしてすべての競合を解決してください。