3

我正在爲移動頁面編寫集成測試。我已經設置了移動系統,如在Railscast中描述的那樣。如果設備是移動設備,基本上會建立一個會話,如果設備不是移動設備,我的控制器會發送到桌面主頁,但如果設備是移動設備,則發送到移動主頁。 Rspec不支持會話,所以我不知道如何讓集成文件知道它應該進入移動主頁。在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。我可以編寫一堆糟糕的代碼來實現這個工作,但必須有一個很好的方法來做到這一點。

回答

0

以下添加到spec_helper.rb(您可能需要rack_session_access寶石,如果它不是已經包含了作爲一個依賴):

require "rack_session_access/capybara" 

過濾器之前添加描述或上下文塊:

before(:each) do 
    session[:mobile_override] = "1" 
end