3

モバイルページの統合テストを書いています。Railscastで説明されているように、モバイル システムをセットアップしました。基本的に、デバイスがモバイルの場合はセッションが設定され、コントローラーはモバイルでない場合はデスクトップのホームページに送信しますが、モバイルの場合はモバイルのホームページに送信します。Rspec はセッションをサポートしていないため、モバイルのホームページに移動することになっていることを統合ファイルに知らせる方法がわかりません。

モバイルかどうかを検出するヘルパーで定義されたメソッド。

  def check_for_mobile
    session[:mobile_override] = params[:mobile] if params[:mobile]
  end

  def mobile_device?
    if session[:mobile_override]
      session[:mobile_override] == "1"
    else
      (request.user_agent =~ /Mobile|webOS/) && (request.user_agent !~ /iPad/)
    end
  end

コントローラーアクション

  def home
    check_for_mobile
    if mobile_device?
      @devise_mapping ||= Devise.mappings[:company]
      render "pages/home_mobile"
    elsif company_signed_in?
      redirect_to companies_home_path
    else
      @request = Request.new
      @request.company = params[:company]
      render 'pages/landing'
    end
  end

基本的mobile_device?には、リクエスト仕様で true を返さなければなりません。これを機能させるためにたくさんのくだらないコードを書くこともできますが、それを行う良い方法があるに違いありません。

4

1 に答える 1

0

以下を追加します(まだ依存関係として含まれていない場合は、gemspec_helper.rbが必要になる場合があります)。rack_session_access

require "rack_session_access/capybara"

説明またはコンテキスト ブロックに前フィルターを追加します。

before(:each) do
  session[:mobile_override] = "1"
end
于 2015-01-22T16:59:23.257 に答える