ruby-on-rails - Rspec/Capybara 模拟 session ( stub 或模拟?)

标签 ruby-on-rails session rspec capybara session-variables

我正在尝试访问'/requests/new。现在在 Controller 代码中,我已经编写了它,以便如果 session 不存在,用户将被重定向回主页。像这样:

def new
@pagetitle = "What would you like to borrow?"

if session[:signup_email].nil?
  flash[:danger] = "Please enter your email to get started"
  redirect_to root_path
else
  @signup_parent = Signup.find_by_email(session[:signup_email].downcase)
  if @signup_parent.tos != true || @signup_parent.streetone.blank? || @signup_parent.streettwo.blank? || @signup_parent.zipcode.blank?
    flash[:danger] = "Almost there! We just need a little more info"
    redirect_to edit_signup_path
  else
    @requestrecord = @signup_parent.requests.build 
  end
end

结束

但问题是现在在测试中,我无法模拟 session 。我试着写:

    before do
        session[:signup_email] = Signup.find_by_id(@signup_ana.id)
        visit '/requests/new'
        save_and_open_page
        fill_in '#borrow__1', :with => 1
        click_button
    end

但这引发了一个错误:undefined local variable or methodsession' for #`

然而,如果我不尝试模拟它,save_and_open_page 会告诉我,我只是被重新路由回了家。我应该怎么做?有没有办法将其 stub /模拟出来??

最佳答案

你可以试试这个 gem rack_session_access

然后就可以在 capybara 中调用page.set_rack_session(:user_id => user.id)

关于ruby-on-rails - Rspec/Capybara 模拟 session ( stub 或模拟?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24857140/

相关文章:

ruby-on-rails - 用于从一种形式创建多个对象的 Rails 强参数

ruby-on-rails - 使用 will_paginate 仅显示单个页面的分页

ruby-on-rails - 带有 cmd 固定编码的 Rspec

java - 使用 Struts2 将 Session 对象保存在 Cookie 中

php - 如何为后退按钮保留 Web 表单内容

ruby-on-rails - RSpec:如何 stub 继承的方法 current_user(没有设计)?

ruby-on-rails - 无法使用 rspec Controller POST 创建操作(设计和 cancan)进行测试

ruby-on-rails - 如何基于 Rails 中的子查询 `update_all`

ruby-on-rails - Rails has_one 关系,其中外键位于拥有模型上?

session - ZF2 用户记住我不工作