FaradayとRSpecを使用してRailsアプリケーションのHTTP APIをテストしたいと思います。ファラデーにはホストのURL +ポートが必要です。残念ながら、テスト環境のポートは常に変化します。仕様で現在のポートにプログラムでアクセスするにはどうすればよいですか?テスト環境のRailsポート
答えて
カピバラを使用している場合はそのようにあなたはspec_helper.rbにポートを設定することができます。
Capybara.server_port = 1234
はこれを行うには複数の方法は、おそらくありますが、これはのために働いています今私:
コマンド
port = `lsof -p #{Process.pid} -ai TCP -as TCP:LISTEN -Fn | grep ^n | cut -c 4- | uniq`.strip
。なお、アプリがロードされた後、の後にのポイントでこれを行う必要があります。つまり、これはenvironment.rb
またはapplication.rb
ファイルでは使用できません。
次のように説明
は基本的に何このコマンドが行うことです:LISTオープンファイル
-p #{Process.pid}
は、現在のプロセス(すなわち、テストウェブにそれを制限するために
lsof
はUnixコマンドでありますサーバインスタンス)-ai TCP
は、それをタイプTCPの「ファイル」(すなわち、開いているTCPポート)に制限します。 (注意:-a
は、PID 1でそれと検索することです - ちょうど-i
でしょうOR検索を使用して、デフォルト)は(ようにを聞かれているだけでTCPポートへ-as TCP:LISTEN
制限を任意の開いているポートに反対 - )例えばのPostgresへのアプリの接続のよう-Fn
は出力のみに、この場合に
その出力それ自体で部分はこのようなものになります。
p12345
n*:5001
n*:5001
最初の行、p
で始まることはプロセスIDです。これを抑止する方法はありません。 次の2行(倍数を出力できる理由はわかりませんが、分単位で処理します)は「名前」列(したがってn
)で、その後にIP +ポートが続きます。私たちの場合(テスト環境でもあなたのことを想像しています)、Webサーバーはすべての利用可能なローカルIPをリッスンします。したがって、*
です。そして、それは、この場合には5001
最後に、我々はパイプそれを通じ... * grep ^n
「列4から切り出したと言って、最初の行(プロセスID) * cut
を排除するために、ポートがあることを教えてくれる「オン」、だけポート、および* uniq
ただ一つのインスタンスを取得する
(また、改行、これstrip
コールを持つことになります。)
使い方
を返すようにn*:
を削除私の場合、キュウリenv.rb
でこれを使用して、ActiveMailerのURLオプションを再設定して、テスト中のリンクが正常に生成されるようにします:
po [:ホスト] = "0.0.0.0:#{port}" 終了
間違いなくあなたが同じことを行うことができ、RT = lsof -p #{Process.pid} -ai TCP -as TCP:LISTEN -Fn | grep ^n | cut -c 4- | uniq
.strip
のMyApp :: Application.configureは config.action_mailer.default_url_optionsを行いますRspecのヘルパー/設定の中のものも同様です。
- 1. Railsテスト環境の名前付きルート
- 2. Rails with Rails with Rails環境をテストする
- 3. VoIPテスト環境
- 4. Twitter Bootstrapテスト環境
- 5. サービスファブリックAzureテスト環境
- 6. Rails環境変数
- 7. のRailsコンソールのデフォルト環境
- 8. Rails:開発環境でのCronジョブのテスト
- 9. SOA WebServicesのテスト環境
- 10. resque-poolデフォルトのテスト環境
- 11. テスト用のGradleサポートシステム環境
- 12. テスト環境の空中GET
- 13. Android/busybox/termuxのテスト環境
- 14. Rails:環境ごとのイニシャライザ?
- 15. Rails環境でのCQRS?
- 16. 変数は、Railsの環境
- 17. Opsworks Railsのコンソール環境
- 18. Faker in Rails(テスト環境)のカスタマイズをロードするには?
- 19. Rails 3アプリケーションのrails-geocoder環境問題
- 20. テスト環境用Microsoft Graph
- 21. テスト/ライブ環境用WIXインストーラ
- 22. 危険なテスト環境
- 23. RubyマルチスレッドSQL(テスト環境)
- 24. Rails 4アクションメーラー環境変数
- 25. 開発環境のRailsキャッシュにテスト環境データが表示されるのはなぜですか?
- 26. テスト環境とプロダクション環境を設定する
- 27. テスト環境とプロダクション環境がVPSで混在CakePHP
- 28. rspecテストでのRailsアプリケーションのポート番号
- 29. Facebookのページ/アプリケーションのテスト環境
- 30. テスト環境でのデータのリセット
お返事ありがとうございます。残念ながら、それは私たちのためにはうまくいきません。私たちはその特定のテストでカピバラを使用しません。たとえば、 'Faraday.new(:url =>" http:// localhost:3033 ")と呼ぶだけです。私たちは「訪問」などと呼ぶ必要がありますか? – Zardoz
APIをテストするためにRSpec + Capybaraを使用しない理由がわかりません。 http://jeffkreeftmeijer.com/2011/acceptance-testing-using-capybaras-new-rspec-dsl/を参照してください。 – fpauser
どのような文脈でファラデーを使用していますか? – fpauser