在rspec集成测试中测试移动设备但是无法设置会话

时间:2013-04-01 01:30:48

标签: ruby-on-rails mobile rspec integration-testing session-cookies

我正在为移动网页编写集成测试。我已经设置了移动系统,如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。我可以编写一些糟糕的代码来实现它,但必须有一个很好的方法来实现它。

1 个答案:

答案 0 :(得分:0)

将以下内容添加到spec_helper.rb(如果它尚未作为依赖项包含在内,您可能需要rack_session_access gem):

require "rack_session_access/capybara"

添加一个前置过滤器来描述或上下文块:

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