0

セレンを使用してrspecでpaypal認証をテストする機能で奇妙な問題が発生しています。Paypal からサイトに戻ると、その特定の ID で必要なデータが見つからないと表示されますが、別のデータが見つかったようです。テストでデータを端末に出力したところ、そこにありました。spec_helper の環境を開発に変更したとき (これが悪いことはわかっています)、それは機能しました。

エラーは次のとおりです。

Couldn't find PaypalPreapproval with id=1

そして、これが私のコントローラーのコードです

def show
  user = User.find(params[:user_id])
  preapproval = PaypalPreapproval.find(params[:id])
  preapproval.activate
  send_welcome_message(user) if user.addresses.count == 1
end  

エラーを引き起こしているのは PaypalPreapproval.find(params[:id]) ですが、上記の行はその ID を持つユーザーを見つけることができるようです。

これは、私の spec_helper で機能する一時的な修正です

if Capybara.current_driver == :selenium
  ENV["RAILS_ENV"] ||= 'development'
else
  ENV["RAILS_ENV"] ||= 'test'
end

誰にもアイデアはありますか?

4

1 に答える 1

1

私はそれを解決しました。Selenium を実行すると、ポート番号がランダムに生成され、そのサーバーが起動します。テストがサーバーの外部 (外部 URL) に移動したら、リターン URL に、テスト サーバーを実行しているポートを含める必要があります。これをspec_helperに追加しました:

Capybara.server_port = 4000

base_url に環境変数を設定しました

ENV['BASE_URL'] = "http://localhost:3000"

そして、私はそれを指定しました

ENV['BASE_URL'] = Rails.env.test? ? "http://localhost:4000" : "http://localhost:3000"

願わくば、これで他の誰かがデバッグの半日を節約できることを願っています。

于 2013-09-22T18:11:53.263 に答える