貢献ガイド
貢献は大歓迎であり、非常に感謝します!少しでも役に立ちますし、クレジットは常に付与されます。
環境設定
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
自体であるなどです。したがって、この関数は、使用されるWrap
メソッドに関係なく、Foo
がレンダリングするものをラップします。Wrapper
:例:ShallowWrapper
、ReactWrapper
WrapperName
:例:"ShallowWrapper"
、"ReactWrapper"
isShallow
:shallow
の場合はtrue。注:これを使用する必要がある場合はコードの臭いです。避けてください。isMount
:mount
の場合はtrue。注:これを使用する必要がある場合はコードの臭いです。避けてください。makeDOMElement
:mount
では、実際の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.1
とenzyme-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)でブラウザを開くことができます。
ソースファイルのいずれかが変更されると、ブラウザーは自動的に更新されます。
プルリクエストのガイドライン
フォークしたリポジトリからプルリクエストを送信する前に、次のガイドラインを満たしていることを確認してください。
- プルリクエストがバグを修正する場合、変更なしでは失敗し、変更ありではパスするテストを含める必要があります。
- プルリクエストが機能を追加する場合、同じPRの一部としてドキュメントを更新する必要があります。
- プルリクエストは、React 15、React 0.14、およびReact 0.13で機能する必要があります。CIサーバーはPRをプッシュすると自動的にすべてのバージョンでテストを実行する必要がありますが、ローカルで確認したい場合は(上記を参照)そうすることができます。
- 送信する前に、リベースしてすべての競合を解決してください。