私はレンダリングにはReactを、テストにはJest/Jasmineを使用しています。私は古いJest/Jasmine waitsFor
とruns
を使用してテストを書いていますが、これはJasmine 2になりました。新しいdone
asyncsと置き換える方法がわかりません。Jestを使ってReact rendered非同期データをテストするには?
私のコードでReactは、ユーザーについて小さなページをレンダリングします。そのページには、ユーザー投稿を取得するためのAJAX呼び出しがあります。私はユーザーの投稿がうまく戻ってきたことをテストしたいと思います。waitsFor
は非常にうまくいきました。ユーザーが投稿をするまで待ってから続行してください。
Jestテストの中でAJAXコールを使用することについて話している人がたくさんいます。これは私が望んでいないものです。 My JestテストではAJAX呼び出しが行われているかどうかわからないため、結果が返るまで待つ方法が必要です。ここで
はwaitsFor
とruns
と私の現在のコードです:
it('loads user post',() => {
var page = TestUtils.renderIntoDocument(
<UserPage params={{user: 'fizzbuzz', 'pass': 'xxx'}} />
);
waitsFor(() => {
return page.state.posts.length > 0;
}, "post loaded", 10000);
runs(() => {
var posts = TestUtils.scryRenderedDOMComponentsWithClass(page, 'post');
expect(posts.length).toEqual(10);
});
});
どのように私はwaitsFor
とruns
を削除し、作品ジャスミン2.0のコードで置き換えることができますか?すべてのJestテストの知識では、page.state.posts.length
は0より大きくなければならず、expect
何かを入力する必要があります。
私のゆっくりと戻ってきて申し訳ありません!ありがとうございました!あなたが正しい方向にいると思うので、私はアップヴォートを1つ追加しました。 renderIntoDocumentは自分のコードではありませんが、Reactのコードです。私のリアクションコンポーネントは、リアルに作られているかのようにレンダリングされます。 ReactでレンダリングするとAjaxが実行され、Ajaxが正常に完了したことを確認しようとしています。 Ajaxは内部のレンダリングされたReactコンポーネントを完成させることができ、テストでその値をチェックするので、これは古いジャスミンで可能でした。しかし、これまでJasmine 2では不可能でした。 – FizzBuzz
@FizzBuzz心配しない - 私に戻ってくれてありがとう!私は明らかに、現時点ではReactで暗闇の中で少ししか見ていない。しかし、ネイティブのReact関数であれば、この関数を書く開発者(つまり反作用の作成者)が既にテストしているはずだから、このロジックをテストすることを勧めないだろう。その機能を直接テストするのではなく、それは私がとにかくお勧めするものです。私が誤解していたら謝罪します - 私が言ったように、まだリアクトには達していません。 – Shakespeare