ruby-on-rails - 在 rspec 集成测试中测试移动设备但无法设置 session

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

我正在为移动页面编写集成测试。我已经按照 Railscast 中的描述设置了移动系统.如果设备是移动设备,基本上会设置一个 session ,如果不是移动设备,我的 Controller 会发送到桌面主页,如果是移动设备,则会发送到移动主页。 Rspec 不支持 session ,所以我不知道如何让集成文件知道它应该转到移动主页。

在助手中定义的方法来检测是否移动。

  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

Controller Action

  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。我可以写一堆蹩脚的代码来让它工作,但必须有一个好的方法来做到这一点。

最佳答案

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

require "rack_session_access/capybara"

添加前置过滤器来描述或上下文 block :

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

关于ruby-on-rails - 在 rspec 集成测试中测试移动设备但无法设置 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15736488/

相关文章:

ruby-on-rails - 如何从 s3 上的文件而不是表单设置 Paperclip Gem 图像数据?

ruby-on-rails - 如果 text_field_tag 中存在则显示值

jquery - 对由 Json 数组填充的 JQuery 列表进行排序

ruby-on-rails-3 - 在 Rails 中,您可以忽略运行中的特定测试吗?

ruby-on-rails - Rails 无法识别 lib 文件?

ruby-on-rails - Rails 3 命名空间和自定义类的问题(未初始化常量)

android - 响应式网站在移动设备上缩放至 200%

java - 如何从 android native 代码调用 ShowForm?

ruby-on-rails - 预期响应为 < :redirect> but was <200>

ruby-on-rails - 在 Rails 中,如何在特定的 Rspec 测试之前加载所有代码?