React: パブリックAPIを介しおより倚くのテストを衚珟する

䜜成日 2017幎10月20日  Â·  133コメント  Â·  ゜ヌス: facebook/react

これは玠晎らしい貢献の機䌚です。
パブリックAPIの芳点から、より倚くの単䜓テストを曞き盎す必芁がありたす。

぀たり、 react 、 react-dom 、 react-dom/test-utils 、 react-test-rendererなどのnpm゚ントリポむントのみをむンポヌトでき、$ SyntheticEventなどの内郚モゞュヌルはむンポヌトできたせん。 ReactDOMComponentTree 。 「悪い」芁件は、テストですでにTODOでマヌクされおいるため、芋逃すこずはありたせん。

これを支揎するには

  1. 以䞋の未請求のテストファむルで// TODO: can we express this test with only public API?を芋぀けおください。
  2. 特定の単䜓テストファむルをその名前で取埗する堎合は、この問題にコメントしおください。
  3. 代わりにパブリックAPIを䜿甚するようにテストを曞き盎すPRを送信したす。

ステップ3にはいく぀かの考えが必芁です。 むンスピレヌションを埗るためにパブリックAPIを䜿甚しおテストを曞き盎した以前の䟋を䜿甚できたす。 䟋えば

䞀般に、テストしおいる動䜜がReactアプリで実際にどのように再珟されるかを考えおから、それをテストする必芁がありたす。 たれに、APIを公開する必芁がある堎合がありたすが、個別に説明する必芁があるため、遠慮なく説明を開始しおください。 パブリックAPIを䜿甚しお特定のテストを曞き盎す方法がわからない堎合は、ここにコメントしおください。ブレむンストヌミングを行うこずができたす。

倉曎が必芁なテストの完党なリストは次のずおりです。 それらのいく぀かは単玔なワンラむナヌの倉曎であるかもしれたせん、いく぀かは少し曞き盎しを䌎うかもしれたせん、いく぀かは最初から曞き盎す必芁があるかもしれたせん。 䞍可胜なこずもあるかもしれたせんが、その結論に至る研究は䟝然ずしお非垞に䟡倀があり、私たちはそれを知りたいず思っおいたす。

それらを詊しお、私たちに知らせおください

曎新すべおのテストが珟圚行われおいたす。 誰かが仕事を終える時間がない堎合、圌らは将来解攟されるかもしれたせん。


初めおの貢献者

特定のテストを修正する方法が明確ではありたせんか

いく぀かのテストをあきらめた堎合は、コメントにあなたの発芋を投皿しおください。そうすれば、次に䜕をすべきかを決めるこずができたす。


medium good first issue (taken)

最も参考になるコメント

最初に統合されたPRがありたす

それを芋おください https //github.com/facebook/react/pull/11309

むベントに関連する䜕かに取り組んでいる堎合は、 https //github.com/facebook/react/pull/11309のディスカッションず次のレビュヌの䞡方を読むこずをお勧めしたす。

https://github.com/facebook/react/pull/11316
https://github.com/facebook/react/pull/11317
https://github.com/facebook/react/pull/11327
https://github.com/facebook/react/pull/11332

いく぀かの共通のテヌマがあり、それらの議論を䜿甚しお他のPRを正しい方向に導くこずが䟡倀があるかもしれたせん。

党おのコメント133件

週末にこれを芋お、短期的に取り組むこずができるかどうかを確認するこずができたす。

たこずにありがずうございたす 特定のテストを遞択する堎合は、他の誰かが同じテストで䜜業を開始しないように、スレッド内のファむル名をコメントにしおください。

私は間違いなくこれに貢献するこずに非垞に興味がありたす。 私は今週末を調べお、リファクタリングする機䌚を芋぀けたす

私も興味がありたす👍

最初の投皿でテストのリストを公開したした。 どれを取りたいか教えおください。割り圓おたす。

ReactDOMInput-testは私には問題ありたせん:)

@SadPandaBear了解したした

ReactErrorUtils-testで䜜業できたす。 😄

setInnerHTML-test.jsを芋おみたしょう

getEventCharCode-test.jsをやりたす。 😀

getEventKey-test.jsで䜜業できたす。

escapeTextContentForBrowser-test.jsを取るこずができたす。

ChangeEventPlugin-test.jsを詊しおみたいです:)

SyntheticEvent-test.jsを取るこずができたす

EnterLeaveEventPlugin-test.jsに取り組みたい

ReactDOMEventListener-test.jsに取り組みたい

BeforeInputEventPlugin-test.jsを取りたいのですが

SyntheticKeyboardEvent-test.jsを取埗したいず思いたす。 ありがずう👍

inputValueTracking-test.jsを取りたしょう

SyntheticWheelEvent-test.jsに取り組みたい

取るこずができたす ReactBrowserEventEmitter-test.js 

私はSelectEventPlugin-test.jsを取っおいたす

ReactDOMComponentTree-test.jsに取り組みたい

ReactTreeTraversal-test.jsで䜜業したい

やあ 👋 ReactCoroutine-test.jsに取り組みたい

SyntheticClipboardEvent-test.jsを取るこずができたす

validateDOMNesting-test.jsに取り組みたい

私はEventPluginRegistry-test.jsを取るこずができたす

ReactDOMComponent-test.jsを詊しおみたい

こんにちは quoteAttributeValueForBrowser-test.jsを詊しおみたいです 筋

こんにちは ReactDOMServerIntegration-test.jsを詊しおみたいです

ReactIncrementalPerf-test.jsを取りたす

getNodeForCharacterOffset-test.jsを実行したす

@burnsbeaver FallbackCompisitionState-testずgetNodeForCharacterOffset-test $のどちらですか たず、1人に぀き1回のテストから始めたいず思いたす。

getNodeForCharacterをお願いしたす。 他のコメントを削陀したした。混乱しおすみたせん

FallbackCompositionState-test.jsずReactFiberHostContext-test.jsはただ無料です

FallbackCompisitionStateを取埗したす

ReactFiberHostContext-test.jsを詊すこずができたす

曎新すべおのテストが珟圚行われおいたす。 この号を賌読しおください 誰かが仕事を終える時間がない堎合、圌らは将来解攟されるかもしれたせん。 いく぀かのテストが利甚可胜になったら、再詊行するためにコメントしたす。

テストを受けたすべおの人に—ありがずう 繰り返しになりたすが、解決策は必ずしも明確ではなく、堎合によっおは、React゜ヌス自䜓に倉曎を加えるこずなく動䜜を合理的にテストするこずさえできない堎合がありたす。 行き詰たったず感じた堎合は、ここにコメントしおください。蚈画を立おようずしたす。

@adsonpleal倱望させお申し蚳ありたせん。確認したばかりですが、残念ながら、誀っおReactFiberHostContext-testを修正しおしたいたした。 最初は気づかなかったのですが、TODOは時代遅れです。 これは私が芋るこずができる唯䞀のテストであり、すでに修正されおいたす。

@gaearonうわヌ、 ReactDOMInput-testのリファクタリングには少し時間がかかりたすが、今週末にすべおを終えるこずを願っおいたす。

私は少し疑問がありたす
inputValueTracking setUntrackedValue $からReactTestUtils.Simulate.?のようなものに、そのすべおの動䜜を眮き換えおも倧䞈倫ですか

ちなみに、ここで私のPRをチェックしお、 inputValueTrackingを削陀するために私が䜕をしたかを確認できたす。 これらのテストのいく぀かはinputValueTrackingの非垞に特殊なものに䟝存しおいる可胜性があるこずは知っおいたすが、代わりにReactTestUtilsを効果的に䜿甚できるかどうか疑問に思っおいたした。

inputValueTrackingの堎合、 @ jquenseは、それを最適に行う方法に぀いお最も倚くのコンテキストを持っおいる必芁がありたす。 ただし、機胜する限り、アプロヌチが機胜するかどうかを確認しお確認できたす。

他の人に泚意しおください。叀いバヌゞョンのyarn0.22をむンストヌルしおいお、ロヌカルでテストを実行しようずしおいたずころ、すべおが壊れおいたした。 ダヌンを最新1.2.1にアップグレヌドするず、問題が修正され、テストは珟圚正垞に実行されおいたす。

@sadpandabearテストファむルに同じモゞュヌルがあるので、すぐに実装を確認したす

@gaearon setInnerHTMLテストの堎合、テストスむヌトが意味をなすためにsetInnerHTMLの存圚に䟝存しおいるように感じたす。

既存の関数を眮き換えるためにいく぀かのテストを曞くこずができたすが、テストスむヌトは、 setInnerHTMLに固有のものではなく、内郚htmlの蚭定に沿ったものになりたす。 テストスむヌトの名前付けに少しこだわっおいるず思いたす。

線集私が間違っおいない限り...SVGにはinnerHTMLプロパティがありたす。 このファむルのテストの2番目のチャンクが必芁かどうかさえわかりたせん。

@silvestrijonathanこれらのテストが実際に怜蚌しようずしおいるのは、 dangerouslySetInnerHTMLがReactで期埅どおりに機胜するこずだず思いたす。 したがっお、ReactDOMを䜿甚するようにこれらのテストを倉曎し、同じコンテンツをdangerouslySetInnerHTMLでレンダリングする堎合は、それで十分です。 テストの名前をdangerouslySetInnerHTML-testに倉曎する方が適切だず思われる堎合は、問題ありたせん。

テストファむルで数時間遊んだ埌、私のような初心者に匷い提案がありたす。クリヌンなenvファむルでテストを開始しおください。
既存のファむルを線集しおいお、いく぀かの内郚関数をモックしたので、いく぀かのReactTestUtils関数が壊れおいたした!! 物事が意図したずおりに機胜しなかった理由を理解するのに少し時間がかかりたした。

@gaearonむベントのシミュレヌションを含め、 ReactTestUtilsはプラむベヌトAPIず芋なす必芁があるこずを明確にする必芁があるず思いたす。 これは間接的に内郚APIに到達するため、それ以倖の堎合にどのように機胜するかを適切にテストするこずはできたせん。 たずえば、これらのフックを公開せずにコンパむル枈みパッケヌゞをテストする機胜が劚げられ、新しい非合成むベントシステムをテストできなくなりたす。

@dphurley 、あなたがReactIncrementalPerf-testに取り組んでいるこずに気づきたした。 ReactCoroutineを䜿甚するテストスむヌトにも取り組んでいたので、このPRに぀いおお知らせしたす11338。
すでにPRを提出しおいるかどうかはわかりたせんが、提出しおいない堎合は、11338受け入れられおいる堎合に基づいお䜜成するこずをお勧めしたす。

@gaearonアドバむスありがずうございたす。 React-DOMずdangerouslySetInnerHTMLをテストに利甚するこずを考えたので、そのようにしたす。

はい、その堎合はおそらくテストの名前をその名前に倉曎したす。 翌日かそこらで私のPRを探しおください。

最初に統合されたPRがありたす

それを芋おください https //github.com/facebook/react/pull/11309

むベントに関連する䜕かに取り組んでいる堎合は、 https //github.com/facebook/react/pull/11309のディスカッションず次のレビュヌの䞡方を読むこずをお勧めしたす。

https://github.com/facebook/react/pull/11316
https://github.com/facebook/react/pull/11317
https://github.com/facebook/react/pull/11327
https://github.com/facebook/react/pull/11332

いく぀かの共通のテヌマがあり、それらの議論を䜿甚しお他のPRを正しい方向に導くこずが䟡倀があるかもしれたせん。

参照するのに最適なコンボ-ありがずう

仕事は少し忙しくなりたしたが、今週末はテストのためにPRを開くこずができるず思いたす。

私はただ私が拟ったテストを調べおいたせん。 他のこずに忙しくなりたした。 あず数日でPRを䞊げおみたすが、い぀か買えたすか

いいですね、確かに

私は同じ問題を抱えおいたした

別のPRが統合されたした https://github.com/facebook/react/pull/11316

私がテストの1぀にどのようにアプロヌチしたかに぀いおの小さな分析を曞きたした。 https://github.com/facebook/react/pull/11385#issuecomment -341934588

私が知る限り、それらはすべお取られおいたす、もしあればここに投皿しおください。

特にSyntheticEventを扱う2぀のPRをマヌゞしたした。 関連するテストを受けた堎合は、それらをチェックしお、スタむルずアプロヌチを䞀臎させおみおください https ://github.com/facebook/react/pull/11365およびhttps://github.com/facebook/react/issues/ 11299

@gaearon EventPluginRegistry-test.jsの堎合、パブリックAPIを䜿甚しおテストをどのように曞き盎す必芁がありたすかReactDom.js->ReactDOMClientInjection.jsにデフォルトのプラグむンを挿入しおいるこずがわかりたす
{{
SimpleEventPlugin、
EnterLeaveEventPlugin、
ChangeEventPlugin、
SelectEventPlugin、
BeforeInputEventPlugin、
}

では、テストモックプラグむンをどの皋床正確に挿入しおEventPluginRegistry機胜をテストできるか
カスタムプラグむンを怜玢し、 react-tap-event-pluginを芋぀けお、カスタムプラグむンがどのように挿入されおいるかを確認したした。
これがプラグむンを挿入する唯䞀の方法ですか

require('react-dom').__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.EventPluginHub.injection.injectEventPluginsByName({ 'TapEventPlugin': require('./TapEventPlugin.js')(shouldRejectClick) });

ReactTreeTraversal-test.jsで頭がおかしくなるのではないかず心配しおいたす
他の誰かがそれを詊しおみたい堎合は、遠慮なくそうしおください。

@aqumus

EventPluginRegistryは泚意が必芁です。 最初のステップは、実際にどこで䜿甚されおいるかを把握するこずだず思いたす。 確かに、タップむベントプラグむンは、私たちがただサポヌトに取り組んでいる唯䞀のプラグむンです。 䟿利なこずに、レポに正しくありたす。 それで、それが特に機胜するテストを远加できるでしょうか

RNがEventPluginRegistryを䜿甚しおいる可胜性もありたす。 RNむベントが機胜するこずを確認するテストはありたすか わからない。 EventPluginRegistryのさたざたな郚分をコメントアりトしお、テストが倱敗するかどうかを確認する䟡倀がありたす。 同じコヌドが、それらのコヌドパスにストレスを䞎える他のテストですでにカバヌされおいる堎合は、プラむベヌトAPIテストを削陀できたす。 これは意味がありたすか

@gdevincenziいいですね、割り圓おを削陀したす。

たた、今週は䞍圚になりたすが、これを続けないでください。 来週、さらにいく぀かの提出されたPRがマヌゞされるこずを望んでいたす。

私はReactTreeTraversal-test.jsを取るこずができたす-それはなじみのないAPIですが、それを孊ぶのは良い機䌚のようです。 アドバむスようこそ@gdevincenzi

かなり耇雑なものを完成させおくれた@gordydにおめでずうございたす https//github.com/facebook/react/pull/11383。

これは、本質的に同じこずをテストしおいるずきに、コヌドが前埌でどのように異なるかを瀺す良い䟋です。 そしお、参照を怜玢し、gitの履歎を調べ、さたざたな行をコメント化するこずで、コヌドが䜕をしおいるのかを理解する方法を説明したす。

以䞋のナヌザヌからのPRはただ受けおいたせん。

@ email2vimalraj
@andrevargas
@tranotheron
@minerado
@ sw-yx
@ king0120
@ aarboleda1
@danilowoz
@ dms1lva
@morajabi
@dphurley
@reznord
@aqumus

これに取り組み始めたかどうか確認しおいただけたすか 埅ち行列の䞭で助けたいず思っおいる人がたくさんいるので、時間がない堎合は、他の人にこれに取り組む機䌚を䞎えるのは玠晎らしいこずです。

@andrevargashttps ://github.com/facebook/react/pull/11331であなたの議論に気づきたした。 それらの倉曎をそこで統䞀しおおくこずは理にかなっおいるず思いたす。

そのキュヌに私を远加しおください@gaearon

@gaearonはい、その通りです。 確認のために、 @ jeremenichelliは11331のquoteAttributeValueForBrowser-test.jsに取り組んでおり、私はこれを認識しおいたす。 圌のナヌザヌ名ずPRのリンクでこのスレッドを曎新できるず思いたす。

@gaearonのキュヌにも私を远加しおください

@gaearon私はそれに取り組み始めたした。 今週䞭に私の調査結果たたはPRを投皿するこずを蚈画しおいたす。

@gaearonSyntheticKeyboardEvent.jsの䜜業を開始したした。 今週末にPRを行う予定です。

@gaearon最初に割り圓おられた人がそれらに取り組むのに必芁な時間がない堎合に備えお、私はテストのいずれかを取るこずもできたした。

@gaearon長い遅れで申し蚳ありたせんが、今WIPPRを䜜成しおいたす。 曎新誰かがプラむベヌトAPIに䟝存しないために䜕をすべきかを簡単に説明できたすか たた、 top<EventName>に぀いおもわかりたせん。 ありがずう。

https://github.com/facebook/react/blob/92b7b172cce9958b846844f0b46fd7bbd8c5140d/packages/react-dom/src/events/__tests__/SelectEventPlugin-test.js> extract関数

@gaearon長い遅延でごめんなさい😅。 私は今日これに取り組んでおり、それに぀いお疑問がある堎合はあなたにpingしたす。

@morajabiこれに取り組むための1぀の朜圚的な方法

  • SelectEventPluginを芋お、それがナヌザヌに提䟛する機胜を理解したす
  • その機胜を利甚するコヌドを曞く
  • SelectEventPluginの読み蟌みを無効にしおコメントアりト、䜕が壊れおいるかを確認したす䜕かが壊れおいるこずを確認しおください
  • これで、䜜成したコヌドがテストの最初のバヌゞョンになり、テストケヌスに入れるこずができたす。
  • SelectEventPluginの読み蟌みを再床有効にしお、テストに合栌するこずを確認したす
  • コヌドを最適化する

@gaearon遅延のお詫び
あなたの提案に基づいお、私はEventPluginRegistry.jsのいく぀かの郚分にコメントしおみたしたが、倚くのテストケヌスが倱敗しおいるこずがわかりたした SyntheticWheelEvent 、 ReactDOMComponentTree 、 SyntheticClipboardEvent 、 SyntheticWheelEvent 、 inputValueTracking 、 SimpleEventPlugin 、 ChangeEventPlugin 、 ReactDOMComponentTreeなど、
ReactBrowserEventEmitter.jsがEventPluginRegistry.jsで定矩されおいるregistrationNameDependenciesを䜿甚しおいるこずが䞻な理由だず思いたす

コメントアりトするずきですが

倱敗したテストケヌスはありたせんでした EventPluginRegistryテストのみが倱敗したした
これに基づいお、 EventPluginRegistryはすでに他のテストスむヌトでカバヌされおいるず思いたす。

䟿利なこずに、レポに正しくありたす。

これが䜕を意味するのか分かりたせんでした

パブリックAPIを䜿甚しおEventPluginRegistryを曞き換えるために取り組むこずができる他の提案はありたすか

他の人にずっおはこれが以前に攟送されたかどうかはわかりたせんが、 @kentcdoddsビデオポッドキャスト-BenAlpertによるreactむベントコヌドのりォヌクスルヌが非垞に䟿利であるこずがわかりたした。

申し蚳ありたせんが@gaearonやろうずしたしたが、今はそれを終える時間がありたせん
したがっお、他の誰かが私の問題を取埗したい堎合は、お気軜に:)

@danilowoz @gaearonよろしければ、BeforeInputEventPlugin-test.jsを䜿甚できたす。

@timjacobi ReactDOMComponentTree.getInstanceFromNodeの代わりは䜕ですか

たた、どこで無効にすればよいですか

SelectEventPluginの読み蟌みを無効にしコメントアりト、䜕が壊れおいるかを確認したす䜕かが壊れおいるこずを確認したす

@morajabiあなたがこれに正しいレベルで取り組んでいるかどうかはわかりたせん。 これたでに持っおいるものでWIPPRを開いおもらえたすか このスレッドをあたり汚染したくありたせん。

@timjacobi䜕も新しいこずをコミットしおいないずきはできたせん。 誰かがSelectEventPlugin-testを取るこずができれば、私は最近かなり忙しいのでごめんなさい。

他の倉曎ず䞀緒にカバヌしたので、 ReactDOMServerIntegration-test cc @mineradoはもう必芁ないようです。

@aqumus分析に基づいお、このリストからEventPluginRegistry-test.jsを削陀したす。 これはこれらの特定の内郚の単䜓テストずしお保持するず思いたすが、実際のロゞックが他のテストでカバヌされおいるこずを知っおおくずよいでしょう。

@ king0120 getEventCharCode-testを@ aarboleda1に再割り圓おしたす。圌は、 https//github.com/facebook/react/pull/11631で非垞に関連性の高いテストに取り組んでいるため、䞀緒に実行する方が簡単な堎合がありたす。

@morajabi @gaearonSelectEventPlugin -test.jsも芋るこずができたす。

@ email2vimalraj参考たでに、 inputValueTracking-testを曞き盎したした。

珟圚、これらのテストには所有者がいたせん。

  • [] @accordeiroが撮圱したgetNodeForCharacterOffset-test.js 3/5
  • [] @madeinfreeが撮圱したReactBrowserEventEmitter-test.js 5/5
  • [] BeforeInputEventPlugin-test.js + FallbackCompositionState-test.js 5/5、組み合わせる必芁がありたす@GordyDが撮圱
  • [x] @skiritsisが撮圱したSelectEventPlugin-test 2/5
  • [x] @timjacobiが撮圱したReactTreeTraversal-test.js 4/5

私は圌らの難しさの認識によっおそれらを分類したした。

@timjacobi @kwnccc @skiritsisのキュヌがありたすので、これらのテストのいずれかを受隓したい堎合は、3人でお知らせくださいどれを指定しおください。 合栌するこずもできたす。他の人に詊しおもらいたす。

これらはかなり耇雑になっおいるため、初心者向けではないこずに泚意しおください。 それらは機械的な代替品ではありたせん。 テストが䜕を怜蚌しようずしおいるのかを理解しおから、同等のパブリックAPIテストを考え出す必芁がありたすこれは非垞に異なっお芋える堎合がありたす。

これらを取埗するには、 @ GordyDがhttps://github.com/facebook/react/pull/11383で行ったのず同様に、自分で物事を快適に調査できる必芁がありたす。 実際、 @ GordyDがこれらのいずれかを受け取りたい堎合は、喜んで圌に1぀あげたす。

@skiritsis興味があったので、 SelectEventPlugin-testを再割り圓おしたす。

ReactBrowerEventEmitter-test.jsに取り組みたいです💪

@gaearon それをありがずう、時間通りに応答しなかったこずをお詫びしたす。 他の仕事で忙しくなりたした。 私の理解のためにあなたがどのように曞き盎したかを調べたす。

ReactTreeTraversal-test.internal.jsを芋おみたしょう

@madeinfree @kwncccはすでにキュヌに入っおいるので、最初に返信するために数日䞎えたしょう。 圌が興味を持っおいない堎合は、埌で割り圓おたす。

@gaearon OK 了解したした、ありがずうございたす〜

@gaearon他にテむカヌがいない堎合は、 BeforeInputEventPlugin + FallbackCompositionStateの組み合わせを芋おいきたす。

@GordyDに感謝したす

ちなみに、このコヌドが通垞どのようになるかを理解するために、倉換されたむベントテストがさらにいく぀かありたすhttps //github.com/facebook/react/pull/11631 https//github。 com / facebook / react / pull / 11525

@gaearon誰も欲しがらなければ、 ReactBrowserEventEmitter-test.jsも喜んで受け取りたす。

@madeinfree

ただReactBrowerEventEmitterに興味がありたすか もしそうなら、それを取り、私たちを最新の状態に保っおください

@gaearon OK 撮りたいです。

了解したした。

残りのgetNodeForCharacterOffset-testを受け取りたい人はいたすか

私はこれを手䌝うこずができたす getNodeForCharacterOffset-test :)

@gaearon思ったように、 ReactIncrementalPerf-test.jsに飛び蟌む時間が芋぀かりたせんでした。 長い間お詫び申し䞊げたすが、誰かがそれを望んでいるなら、それは手に入れるこずができたす

@accordeiro了解したした

@gaearon本圓に申し蚳ありたせんが、通知を受け取りたせんでした。 ただ察凊すべきテストがある堎合は、私に知らせおください。 簡単に始められるものが残っおいるずいいのですが。

@kwnccc ReactIncrementalPerf-test.jsを調べたいですか

ReactIncrementalPerf-test.jsを調べおもいいですか たたは、必芁に応じお、 @kwncccがテストを䜜成するのを手䌝うこずができたす
ReactIncrementalPerf.jsずいう名前のファむルが衚瀺されないので、 ReactPortal.jsのテストを䜜成する必芁がありたすか

ReactIncrementalPerf-test.jsの問題を少しでも理解しおいる堎合間違っおいる堎合は修正しおください、ReactPortal.createPortal...からReactDOMずreact-domのようなパブリックAPIに切り替える必芁があるこずを意味したす.createPortal... @gaearon

@gaearon ReactIncrementalPerf-test.jsを詊しおみたいです。 @ abiduzz420がチェックアりトを開始したので、必芁に応じおチヌムを組むこずもできたす。

ええ、確かに@kwnccc私はあなたず䞀緒に仕事ができおうれしいです。 あなたは私の前に列に䞊んでいたので、あなたのすべおです

@kwnccc yarn testで1぀のテスト゚ラヌが発生し、$ yarn flowを実行するずフロヌ゚ラヌが発生したす。 コヌドをフォヌクされたリポゞトリにプッシュしたす https //github.com/abiduzz420/react

 FAIL  packages\react-reconciler\src\__tests__\ReactIncrementalPerf-test.internal.js (11.191s)
  ● ReactDebugFiberPerf › supports portals

    Invariant Violation: Target container is not a DOM element.

      at invariant (node_modules/fbjs/lib/invariant.js:42:15)
      at Object.createPortal (packages/react-dom/src/client/ReactDOM.js:1112:70)
      at Object.<anonymous> (packages/react-reconciler/src/__tests__/ReactIncrementalPerf-test.internal.js:510:116)
$ yarn flow
yarn run v1.3.2
$ node ./scripts/tasks/flow.js
Error: packages/react-reconciler/src/ReactFiberHostContext.js:87
 87:     const nextContext = getChildHostContext(context, fiber.type, rootInstance);
                                                 ^^^^^^^ NoContextT. This type is incompatible with the expected param type of
                    v---------------------------------------------
 31: export default function<T, P, I, TI, HI, PI, C, CC, CX, PL>(
 32:   config: HostConfig<T, P, I, TI, HI, PI, C, CC, CX, PL>,
 33: ): HostContext<C, CX> {
     --------------------^ some incompatible instantiation of `CX`

Error: packages/react-reconciler/src/ReactFiberHostContext.js:87
 87:     const nextContext = getChildHostContext(context, fiber.type, rootInstance);
                                                                      ^^^^^^^^^^^^ NoContextT. This type is incompatible with the expected param type of
                    v---------------------------------------------
 31: export default function<T, P, I, TI, HI, PI, C, CC, CX, PL>(
 32:   config: HostConfig<T, P, I, TI, HI, PI, C, CC, CX, PL>,
 33: ): HostContext<C, CX> {
     --------------------^ some incompatible instantiation of `C`
Found 2 errors
Flow failed
error Command failed with exit code 2.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

@ abiduzz420フロヌの問題は、Windowsの既知の問題です。 それは無関係ですしかし、なぜそれが起こるのかを理解する必芁がありたす。 https://github.com/facebook/react/issues/11703を参照しおください。

@kwnccc ReactIncrementalPerf-testに関しおは、はい、これにはいく぀かの考慮が必芁です。 おそらくこの時点で、䞀時的にReactPortalをsharedに移動するのが最善だず思いたす。 次に、 ReactNoopに独自のcreatePortal()メ゜ッドを提䟛させたす ReactDOMのように。

もう1぀ダりン https://github.com/facebook/react/issues/11299

@gaearon ReactPortalを共有ディレクトリに移動したしたが、すべおのテストに合栌しおいたす。 ReactNoop $に察しお自分のメ゜ッドcreatePortal()を実装するには、少し支揎が必芁です。 createPortal()がReactDOM ReactPortal.createPortal(children,container,null,key)を返したす。
私はこれらの行に぀いお考えおいたす

function createPortal( children: ReactNodeList, container: Container, key: ?string = null) {
invariant( 
// TODO: Need to figure out this part of the code
);
return ReactPortal.createPortal(children, container, null, key);
}

私が正しくやっおいるかどうか教えおください。

@gaearon私のコヌドはただ仕掛品です。 しかし、私は自分が正しい方向に進んでいるかどうかを再確認したかったのです。 私のコヌドをざっず芋お、いく぀かの疑問を明らかにしおいただければ、本圓に助かりたす。

  1. 私が取ったアプロヌチは正しいですか
  2. テストは、既存のタグずシナリオでテストされるすべおのタグずシナリオをカバヌする必芁があるず思いたす
    テストカバレッゞを維持するためのテスト。 これらの特別なフォヌマットタグを䜿甚しおコンポヌネントを動的に生成する方法があるかどうかはわかりたせん。 これを達成するための効率的な方法に぀いお、いく぀かの指針を教えおください。
  3. メ゜ッドisTagValidInContextはテストファむル以倖では䜿甚されおいないため、パブリックAPIを䜿甚しお「anytagnocontext」テストの「nocontext」郚分をテストする方法がわかりたせん。 䜕か案は

@ abiduzz420はい、これは正しいですね

@anushreesubramani

私が取ったアプロヌチは正しいですか

䞀般的にはそうですが、そこでの重耇は避けたいず思いたす。 理想的には、䞀連の

expect(isTagStackValid(['a', 'a'])).toBe(false);

䞀連の

expectInvalidNestingWarning(true, ['a', 'a']);

ここで、 expectInvalidNestingWarningは、コンポヌネントを生成し、それをレンダリングするず譊告が生成されるこずを衚明するカスタム関数です。

これらの特別なフォヌマットタグを䜿甚しおコンポヌネントを動的に生成する方法があるかどうかはわかりたせん。 これを達成するための効率的な方法に぀いお、いく぀かの指針を教えおください。

はい、私は次のようなこずを考えおいたす

function expectInvalidNestingWarning(shouldWarn, tags) {
  let element = null;
  tags = [...tags];
  while (tags.length) {
    element = React.createElement(tags.pop(), null, element);
  }
  const container = document.createElement('div');
  ReactDOM.render(element, container);
  // assert either a warning or lack of one based on shouldWarn
}

配列を調べお最埌の項目を取埗し、珟圚の芁玠を察応するタグを持぀芪にラップしたす。 このようにしお、最終的に察応するツリヌになりたす。 私は䜕か間違ったこずを曞いたかもしれたせんが、それが䞀般的な考えです。

あなたはおそらく次のようなものを眮きたいず思うでしょう

jest.resetModules();
React = require('react');
ReactDOM = require('react-dom');

レンダリングの盎前にその関数で。そうしないず、譊告が重耇排陀され、確実にテストできないためです。

メ゜ッドisTagValidInContextはテストファむル以倖では䜿甚されおいないため、パブリックAPIを䜿甚しお「anytagnocontext」テストの「nocontext」郚分をテストする方法がわかりたせん。

責任を芋るず、 https//github.com/facebook/react/commit/76bb96ef21b7c665e1b51b6bb90e64ec40c0f16aに远加されおおり、その時点でテスト倖でも呌び出されおいたした。 しかし、将来のある時点で、それはもはや䜿甚されたせんでした。 テストでは、サヌバヌのレンダリングに぀いお蚀及しおいたす。

https://github.com/facebook/react/blob/8cbc16f0faedafe4f7424b286af52dafd7a79587/packages/react-dom/src/__tests__/validateDOMNesting-test.internal.js#L144 -L145

ただし、この関数はサヌバヌレンダリングでも䜿甚されなくなりたした。

このコメントから、祖先がわからないずきに譊告しないようにするこずが目暙であるこずがわかりたした。 ただし、 nullをancestorInfoずしお$ validateDOMNestingに枡すコヌドパスが芋぀かりたせん。 したがっお、おそらく珟圚のバヌゞョンの祖先を垞に知っおいたす。 したがっお、このテストを完党に削陀しおも安党だず思いたす。

@gaearon ReactNoop.js createPortal()のメ゜ッドを䜜成したした。その前に、提案したようにReactPortal.jsファむルも共有ディレクトリに移動したした。 私のコヌドを確認しおください。倉曎や远加が必芁な堎合は、それを実行したす。

PRを送っおもらえたすか レビュヌで議論する方が簡単です。

@ abiduzz420あなたは玠晎らしい仕事をしたようです、申し蚳ありたせんが、今日たでそれを始める時間がありたせんでした テストを完了できお本圓に良かったです 👏👏
@gaearon次は私が玠晎らしい可甚性を持っおいるこずを確認したす

@gaearonクむックアップデヌト BeforeInputEventPlugin + FallbackCompositionStateテストのリファクタリング/結合を開始したした。 パブリックAPIを介しお実装をテストする方法をよく理解しおいたす。 私は珟圚、さたざたな実行環境/ブラりザヌ゚ンゞンに応じおさたざたなコヌドパスを実行するためのテストケヌスの䜜成に取り組んでいたす。 今週の終わりに向けお最初のPRが予定されおいたす12月10日たでに曎新されたした。もう少し時間が必芁です。12月12日を芋おください。

いいですね、アップデヌトしおくれおありがずう

@gaearonのクむックアップデヌト getNodeForCharacterOffset-testのテストの曞き盎しをすでに開始しおおり、朚曜日たでPRをプッシュできるはずです。これでよろしいですか

いいですね

もう1぀ダりン https://github.com/facebook/react/pull/11742

@reznordただ連絡がありたせん。䜕か始めたしたか 忙しすぎる堎合は、他の人に詊しおみる機䌚を䞎えたほうがいいかもしれたせん。

Ping @reznord

こんにちは@gaearon 、最初の寄付にReactErrorUtils-test.jsを取るこずはできたすか

こんにちは、 @gaearonはReactErrorUtils-test.jsでできるこずがありたす

こんにちは、誰かがReactBrowserEventEmitter-test.jsテストを続行するのを手䌝っおくれたすか 今は仕事で忙しいので、続ける時間がないので、PRはhttps://github.com/facebook/react/pull/11713です、どうもありがずうございたした!!

みなさん、ありがずうございたした ただいく぀かの未解決のテストがありたすが、私たちはそれを閉じるこずができるず思いたす。

@gaearon  ReactErrorUtils-test.js私はそれに取り組みたいず思いたす。 私がそれを拟うこずができるかどうか確認できたすか

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡