問題タブ [webmock]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby - Rubyブロックと一緒にデータを渡す方法は?
一部のデータをブロックとして外部 API に渡そうとしています。追加のパラメーターを受け入れるように調整するのは面倒です。もしそうならjavascript
、私はそれを次のようにするかもしれません:
これはRubyで可能ですか?または、データをブロックに関連付けるにはどうすればよいですか?
質問の編集が正しかったかどうかはわかりません。まず、可能であれば、具体的にいくつかのデータをブロックと共に渡したいと思います。かどうかはわかりませんが。おそらくそれを行う唯一の方法ruby
は、いくつかのデータをブロックとして渡すことです。
さらに、ここにいくつかの有用な情報があるかもしれません。
わかりました、全体像を示すことはおそらく理にかなっています。私はwebmock
自分のニーズに適応しようとしています。POST
リクエストのパラメーター (または のGET
) が指定された基準に一致するかどうかをチェックする関数があります。
完璧ではありませんが、今のところ、私の特定のニーズには十分です。私はそれを次のように呼んでいます:
そして問題は、一般的に、条件を出力する賢明な方法が見当たらないということwith block
です。options
しかし、私の特定のケースでは、ハッシュを出力するだけです。そしてこれの代わりに:
これを持っている:
これが私がやろうとしていることです。
ruby-on-rails-4 - スチュービング Google Places call selenium vs capybara-webkit
Selenium AND/OR capybara-webkitドライバーと Webmock をスタブ フレームワークとして使用してCapybaraを使用しています。
Selenium (firefox) を使用して Google マップ (場所) オートコンプリート入力の統合テストを実行すると、ブラウザーは Google に対していくつかの実際の呼び出しを行い、場所コンポーネントを含む JSON を受け取ります。
同じことをするために capybara-webkit ドライバー (muuuuch より高速) に変更すると、外部要求をスタブする必要があるという webmock メッセージが表示されます。
なぜこの2つに違いがあるのか 誰かが私に説明してもらえますか?
注:WebMock.disable_net_connect!( :allow_localhost => true )
ローカルサーバーへの呼び出しを許可するように設定しました...
編集:
WebMock のようなツールは優れていますが、JavaScript をテストする場合、ページをロードするのは別のブラウザー プロセスであり、Ruby テスト プロセスではありません。これは、ビルド サーバーへの要求が Net::HTTP を経由しないことを意味します。リクエストは Firefox または capybara-webkit からのものであり、これらのツールは、HTTP トラフィックを再ルーティングしようとするあなたのわずかな試みを喜んで認識しません。
http://robots.thoughtbot.com/using-capybara-to-test-javascript-that-makes-httpからの引用
これは、支払いシステムへの呼び出し (Rails コントローラーで行われる) をスタブ化する必要がある理由と ajax がスタブ化しない理由を説明していますが、Firefox が Google に到達し、webkit がスタブを要求する理由を説明していません。
解決:
TL;DR; :seleniumを保持し、外部APIへのajax呼び出しを行う必要があるテストで実際の呼び出しを行います
JS/ブラウザの外部呼び出しに使う puffing-billy でモックしてみましたが、これは Webmock と「うまく連携」しません。また、支払いシステム用の 25 のスタブが既に Webmock で書かれているので、切り替えることはできません...
記録フレームワークであるVRCも試しましたが、これもアプリケーションからの呼び出し用です(Ruby NETライブラリ)
最終的に、Firefox を起動して gMaps を実際に呼び出す :selenium ドライバーを使用して、ajax API 応答を必要とするこれらのいくつかのテストを実行し続けることにしました。
unit-testing - 1 つのテスト ケースが他のテスト ケースに干渉しているように見える
これはRails 4.0.11にあります。API と対話するワーカーに対して minitest と webmock を使用してテストを作成しています。テスト ファイルには (これまでのところ) 2 つのテスト ケースがあります。両方のテストを実行すると、2 つ目のテスト (タイトルに「成功」が含まれるテスト) が失敗します。合格したテスト (タイトルに「再試行」が含まれているもの) をコメントアウトすると、失敗していたテスト ケースが合格になります。テスト ケースが互いに干渉しているように見えますが、その方法がわかりません。
(これらのコード例では、会社の機密データを難読化しています。こんにちは!)
テストは次のとおりです。
ワーカーは次のとおりです。
これが私の端末出力です:
両方のテスト ケースを実行します。
最初の (「再試行」) テスト ケースをコメント アウトします。
両方のテストを一緒に実行binding.pry
し、ワーカーで (ここでコメントアウト)を使用してresponse
、「成功」テスト ケース (失敗したテスト ケース) の値を調べると、次の 2 つの結果が得られます。どちらの場合も同じ結果 (2 つ目) が期待されます。
両方のテスト ケースを実行します。
最初の (「再試行」) テスト ケースをコメント アウトします。
最後の例の応答の値は、「成功」ケースではなく、「再試行」テスト ケースの最初の反復中に期待されるものです。
セットアップ メソッドにあったものを、sample_response_body
ここに表示されている定数とメソッドに移動しようとしました。このティアダウン メソッドも追加しようとしましたが、役に立ちませんでした。
私はワーカーとテストの両方をゼロから書いているので、どこかにばかげた構文/論理エラーがある可能性は十分にあります。おそらく非常に冗長な質問で申し訳ありませんが、これには本当に頭が痛いです。あなたの助けに感謝します。ありがとう。
ruby - Ruby - Webmock: 正規表現を使用して URI を一致させる
私は rspec と webmock を使用しており、スタブ要求を検討しています。正規表現を使用して URI を照合しようとすると、問題が発生します。
特定の URI (/.*/)に一致させずに、以下のスタブを使用すると、すべてが正常に機能していました。
読みやすさを向上させるためにテストをより具体的にしたいので、 以下のスタブを使用して、次の特定の URI: /insertion_order/012awQQd?fields=name,type&depth=4と一致させようとすると:
私が持っているテストを実行しています:
使用した正規表現は正しいのですが、このエラー メッセージが表示される理由がわかりません。
ruby-on-rails - Webmock が外部 API 呼び出しをキャッチしない
新しいキュウリ テストの一環として、外部 API リクエストをモックする必要があります。私の通常のやり方は、最初に呼び出しを行うテストを作成し、WebMock がそれについて文句を言うことを期待することです。次に、WebMock が提供する情報を使用して、リクエストをスタブします。
しかし、このレポ (私にとっては初めて) では、WebMock はリクエストをインターセプトしません。タイムアウトするだけです。さらに興味深いことに、rspec では期待どおりに動作します (リクエストの試行をインターセプトし、それをモックする方法を教えてくれます) が、キュウリではそうではありません。
私はこれを持っていますfeatures\support\webmock.rb:
私も同じ行を入れてみましたfeatures\support\env.rb
。それでもリクエストを許可します。
もちろん、これを別の方法でスタブ化する方法を理解することはできますが、間違った場合にテストがライブ呼び出しを行う可能性があることは気になります。誰でも助けることができますか?
アップデート:
外部リクエストが実際に行われないようにしていると判断しました(:allow_localhost => true)
が、不正なリクエストを示す WebMock メカニズムをトリガーせず (例外をレスキューすると仮定します)、代わりにリクエストが単にタイムアウトします。理由はまだわかりません。
更新 2:
問題が見つかりました。このリポジトリは、カスタム クライアント gem を使用して別の内部サービスと通信します。その gem は接続エラーをレスキューするため、webmock エラーは飲み込まれます。
ruby-on-rails-4 - 500 エラーのスタブ
Webmocks のスタブ化に問題があります。
これは、認証と承認に devise/cancan を使用する Rails 4 アプリケーションです。RSpec を使用してテストを作成しています。
実行したいテストがあります (この投稿のために簡略化されています!)。
完全なテスト スイートでは、expect ステートメントより上のすべてが、lets または set in before ブロックを使用して設定されます。最小のオプションまで抽出しようとしましたが、テストはまだ失敗しています。
質問
私は期待していました
常に 500 のステータス レスポンスを返すようにしましたが、200 を返しています。
私の期待は正しかったですか?これは、webmocks を呼び出す方法ですか?