機能をリクエストしバグを報告しますか?
バグを報告したい。
現在の動作は何ですか?
現在、有効な機能コンポーネントがTestUtils.renderIntoDocumentに渡されると、 nullが返され、エラーは発生しません。
デモ
この動作はサンドボックスで再現されました: https :
コンソールをチェックして、準備されたサンプルコンポーネントのTestUtils.renderIntoDocument出力を確認します。
回避策
SFCとFCの両方を満たす回避策は、コンポーネントをコンテナーにラップすることです。
const FCCounter = () => {
const [count, setCount] = useState(0);
return (
<div>
<div>{count}</div>
<button onClick={() => setCount(count + 1)}>+1</button>
</div>
);
};
TestUtils.renderIntoDocument(
<div>
<FCCounter />
</div>
);
期待される動作は何ですか?
この問題の影響を受けるReactのバージョンはどれですか?
Reactバージョン:16.8.6
機能コンポーネントにはinstances
がないので、何を期待しますか
TestUtils.renderIntoDocument(<FCCounter/>)
戻るには?
また、大まかに言って、あなたがやろうとしていることを説明できますか? forwardRef
/ useImperativeHandle
(https://reactjs.org/docs/hooks-reference.html#useimperativehandle)を使用して、内部の「メソッド」にアクセスできますが、私は何に興味がありますかあなたはまったくテストしようとしています。
呼び出した後TestUtils.renderIntoDocument
古典的なコンポーネントで、私は完全にそれがの到達するために有効になっていますstate
、 props
して使用してコンポーネントを操作setState
。 したがって、 TestUtils.renderIntoDocument
が返されると予想したのは、 state
、 props
、およびsetState
を使用できるオブジェクトです。
機能コンポーネントとして実装されているコンポーネントをテストしようとしています。 主な目的は、コンポーネントの状態を変更し、変更された状態がテストで期待される状態と一致するかどうかを確認することです。
テストの場合、前提条件があります。コンポーネントはそのままテストする必要があり、テスト専用のコードを含むように変更しないでください。 したがって、 forwardRef/useImperativeHandle
を使用するようにコンポーネント自体を変更することはできません。
@DeividasBakanas関数コンポーネントにはインスタンスがありません。 ボタンをトリガーすると、イベントをディスパッチして状態を更新できます。 私の意見では、これはTestUtils.renderIntoDocument
から返されたインスタンスを強制的に更新しようとするよりも優れたアプローチです(クラスコンポーネントの場合)。
前述の@trueadmのように、コンポーネント自体の実装の詳細をテストすることはお勧めしません。また、props / eventsを使用して更新をトリガーし、コンポーネントの出力に対してアサーションを実行します。 これを少し簡単にするために、react-testing-libraryhttps ://github.com/kentcdodds/react-testing-libraryのようなライブラリをお勧めします。 ケントはまた、このトピックについて広範囲に書いているので、お勧めします。
バグ/機能のリクエストというよりは使用上の質問であるため、この問題を解決します。