2011-07-24 13 views
4

FaradayとRSpecを使用してRailsアプリケーションのHTTP APIをテストしたいと思います。ファラデーにはホストのURL +ポートが必要です。残念ながら、テスト環境のポートは常に変化します。仕様で現在のポートにプログラムでアクセスするにはどうすればよいですか?テスト環境のRailsポート

答えて

7

カピバラを使用している場合はそのようにあなたはspec_helper.rbにポートを設定することができます。

Capybara.server_port = 1234 

も参照してください:https://github.com/jnicklas/capybara/pull/123

+0

お返事ありがとうございます。残念ながら、それは私たちのためにはうまくいきません。私たちはその特定のテストでカピバラを使用しません。たとえば、 'Faraday.new(:url =>" http:// localhost:3033 ")と呼ぶだけです。私たちは「訪問」などと呼ぶ必要がありますか? – Zardoz

+0

APIをテストするためにRSpec + Capybaraを使用しない理由がわかりません。 http://jeffkreeftmeijer.com/2011/acceptance-testing-using-capybaras-new-rspec-dsl/を参照してください。 – fpauser

+0

どのような文脈でファラデーを使用していますか? – fpauser

3

はこれを行うには複数の方法は、おそらくありますが、これはのために働いています今私:

コマンド

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は出力のみに、この場合に
    に耳を傾けているIP /ポートになります「名前」欄に、それを伝えます

    その出力それ自体で部分はこのようなものになります。

    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のヘルパー/設定の中のものも同様です。

  • 関連する問題