【问题标题】:testing mobile in rspec integration test but cant set session在 rspec 集成测试中测试移动设备但无法设置会话
【发布时间】:2013-03-22 02:48:17
【问题描述】:

我正在为移动页面编写集成测试。我已经像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。我可以编写一堆蹩脚的代码来让它工作,但必须有一个好的方法来做到这一点。

【问题讨论】:

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


    【解决方案1】:

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

    require "rack_session_access/capybara"
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多