13

次のコードをconfig/environments/test.rbファイルに追加しました。

config.action_mailer.default_url_options = { :host => "localhost:3000" }

ただし、テストを実行すると、すべてのルートでが使用されますhttp://test.host。有効なコールバックURIとして受け入れないAPIを使用しようとしているhttp://test.hostので、API応答を正しく受信するためにこれを変更する必要があります。これが機能しない理由はありますか?(テストスイートでRSpec、Guard、およびSporkを使用しています)。

編集:おそらく関連性があります-これはコントローラー仕様の内部で行われています。

EDIT2:、getなどを介してリクエストが行われた後、変更されるようですpost。テスト内で次のコードを実行します。

Rails.logger.debug users_url
get 'http://google.com'
Rails.logger.debug users_url

次の出力が生成されます。

http://localhost:3000/users
...get request related response here
http://google.com/users
4

4 に答える 4

17

test.rb最近では、好きなように設定することができます:

Rails.application.routes.default_url_options[:host]= 'localhost:3000' 
于 2013-10-04T17:43:53.857 に答える
0

私の経験から、url_options少しのハッキングなしではテストに渡されません。

例を参照してください

テストでロケールを設定しようとしたときに、この問題に頻繁に遭遇しました。ただし、アクション メーラーは使用したことがないので、もっと簡単な方法があるかもしれません。

デフォルトのロケールを設定するために私が見つけた解決策は、actiondispatchurl_optionsにパッチを適用し、必要なロケールを使用するように強制することです。このように、これをあなたのケースに適応させることができます:

class ActionDispatch::Routing::RouteSet
  def url_for_with_default_url_options(options)
    url_for_without_default_url_options(options.merge(:host => "localhost:3000" ))
  end

  alias_method_chain :url_for, :default_url_options
end

そのコードを spec/support のファイルに入れて、rspec テストで使用し、env.rb ファイルからも要求するので、キュウリ テストでも使用できます。

これにより、テスト コードとテストで実行されている実際のコードの両方で、あらゆる場所にパッチが適用:hostされ、渡そうとするキーの他の設定が上書きされることに注意してください (パッチはオプションの上に修正をマージするため)に渡されurl_forます)。あなたの場合、それは問題ではないと思います。

ただし、Monkey パッチはあまり洗練されたソリューションではなく、他のすべてが失敗した後にこれを使用しました。アクションメーラーに固有のより簡単な解決策が見つかるかもしれません。

于 2012-10-22T04:15:23.480 に答える
0

テストはどのように実行していますか? たぶん、追加RAILS_ENV=testが役立つかもしれません。

于 2012-10-22T03:09:57.743 に答える