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