貢獻指南
歡迎投稿,並深表感謝!每一份力量都值得肯定,也一定會載譽於冊。
設定你的環境
將 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
輸出的內容,而mount
包覆層中的Foo
根部是Foo
本身。因此,這個函式會產生包覆層,用來包覆Foo
的輸出內容,不論使用的Wrap
方法為何。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 來建置其儲存庫,並需從這個儲存庫中發布多個套件。我們使用 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 伺服器應自動在所有版本中執行測試,但如果您想在本地檢查,您可以這麼做(請見上文)。
- 請在提交之前進行重新發布並解決所有衝突。