1

Rails 4.0.0beta1 を使用して、いくつかの統合テストを作成しようとしています。私のすべての URL は私locale(例/en/user/new) にスコープされており、呼び出しを試みるたびに次のエラーが発生しますnew_user_url

ActionController::UrlGenerationError: No route matches {:action=>"new", :controller=>"user"} missing required keys: [:locale]

次の質問で@Balint Erdiが提供する解決策を試しました

class ActionController::Integration::Session
  def url_for_with_default_locale(options)
    options = { locale: I18n.locale }.merge(options)
    url_for_without_default_locale(options)
  end

  alias_method_chain :url_for, :default_locale
end

動作しますが、rails4 のために非推奨の警告が表示されます:

DEPRECATION WARNING: ActionController::Integration is deprecated and will be removed, use ActionDispatch::Integration instead. (called from <top (required)> at /path/to/project/test/test_helper.rb:46)
DEPRECATION WARNING: ActionController::IntegrationTest is deprecated and will be removed, use ActionDispatch::IntegrationTest instead. (called from <top (required)> at /path/to/project/test/test_helper.rb:46)

私のコントローラーテストでは、これを追加しました:

class ActionController::TestCase

  module Behavior
    def process_with_default_locale(action, http_method = 'GET', parameters = nil, session = nil, flash = nil)
      parameters = { locale: I18n.locale }.merge( parameters || {} ) 
      process_without_default_locale(action, http_method, parameters, session, flash)
    end

    alias_method_chain :process, :default_locale
  end 
end

メソッドをテストに直接追加することもテストしましdefault_url_optionsたが、機能しませんでした。

統合テストでデフォルトの URL パラメータを設定するにはどうすればよいですか?

4

3 に答える 3

1

わかりました、 で置き換えるのと同じくらい簡単ActionControllerですActionDispatch。以前は機能しなかった理由はわかりませんが、非推奨の最新のレールに更新したため、rake test:integration機能しrails test integrationているようです:

class ActionDispatch::Integration::Session
  def url_for_with_default_locale(options)
    options = { locale: I18n.locale }.merge(options)
    url_for_without_default_locale(options)
  end

  alias_method_chain :url_for, :default_locale
end
于 2013-03-18T11:04:46.027 に答える