ほとんどの現代的なソーシャルメディアサイトにある「リンクプレビュー」機能を模倣したReactコンポーネントがあります。あなたは、リンクを入力し、それがCapybaraでテスト中に意図的にAJAX応答を遅らせるには?
私が反応成分を有することにより、これを行う...など、画像、タイトルをフェッチAJAXは、URLのプレビューデータをフェッチするために自分のサーバーにコールバックします。
私が中間の「ロード」状態(すなわち、いくつかのロードアイコンや糸車)を示しフェッチだが
関連はisLoadingAttachment
状態変数にのみ有効であるか注意
this.setState({ isLoadingAttachment: true })
return $.ajax({
type: "GET",
url: some_url,
dataType: "json",
contentType: "application/json",
}).success(function(response){
// Succesful! Do Success stuff
component.setState({ isLoadingAttachment: false })
}).error(function(response) {
// Uh oh! Handle failure stuff
component.setState({ isLoadingAttachment: false })
});
ようスニペットが見えますリアクトサーバーがフェッチを実行している間、短い秒間です。成功シナリオとエラーシナリオの両方が即座に無効になります。
Capybaraの機能仕様で「ローディング中」の機能をテストしたいと思います。私はすべてのWeb呼び出しとサーバーから返されるデータを嘲笑しましたが、すべてが速く起こって、「ロード」状態を通過してからexpect()..
ステートメントを実行することさえできます。また、意図的にwait_for_ajax
と呼ぶことはありませんので、ページはajaxを待たずに進みますが、まだ速すぎます。
最後に、意図的にサーバーコールを1.0秒遅らせることも試みましたが、それもうまくいきませんでした。私は、全体が何とかシングルスレッドなので、私は仮定しますか?
# `foo` is an arbitrary method called during the server-side execution
allow_any_instance_of(MyController).
to receive(:foo) { sleep(1.0) }.and_call_original
どうすればいいですか?
ありがとうございます!
おかげのような何かを行うことができるようになるアプリのコードの外側のモックウェブ応答に - https://github.com/oesmith/puffing-billy - よりよい解決策は
puffing-billy
のようなものを使用することです!もう1つのフォローアップ - 'puma'が' webrick'よりもサーバーにとってより良い選択になるのは何ですか?私はサーバが無関係であると思っていたでしょう。両方とも同じ種類の応答を生成するからです。 – user2490003@ user2490003 'puma'はデフォルトでマルチスレッドで、複数の同時リクエストを処理します(同じリクエストを別のリクエスト) - 99%は、あなたがプロダクションでwebrickを使用していないと確信しています。できるだけ多くのテストをenvに一致させることがベストです。 –
あなたは正しいです、私は生産でプーマを使用しています。説明をありがとう! – user2490003