微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails – 使用Rspec和Capybara在Rails 3中测试会话

我正在尝试用rspec,factory_girl和amp;来编写集成测试.水豚.我也安装了黄瓜,但我没有使用它(据我所知).

我基本上想用我的用户预填充数据库,然后转到我的主页并尝试登录.它应该重定向到user_path(@user).

但是,我的/ rspec / requests / integration测试似乎没有持久化会话.

我的规范:/rspec/requests/users_spec.rb

require 'spec_helper'

describe "User flow" do

  before(:each) do
    @user = Factory(:user)
  end

  it "should login user" do

    visit("/index")

    fill_in :email,:with => @user.email
    fill_in :password,:with => @user.password
    click_button "Login"
    assert current_path == user_path(@user)
  end
end

返回:

Failures:

  1) User flow should login user
     Failure/Error: assert current_path == user_path(@user)
     <false> is not true.
     # (eval):2:in `send'
     # (eval):2:in `assert'
     # ./spec/requests/users_spec.rb:16

相反,它会重定向到我的please_login_path – 如果登录因任何原因失败(或者如果未设置session [:user_id]),则会发生这种情况.

如果我尝试将session.inspect放入,它将作为nil对象失败.

如果我尝试在控制器测试中执行此操作(/rspec/controllers/sessions_spec.rb),我可以毫无问题地访问会话,并且我可以调用session [:user_id]

解决方法

如果你正在使用Devise,你需要包括Warden :: Test :: Helpers(在spec_helper的要求之后是一个好地方),如 in the warden wiki所述.

对session的调用返回nil,因为capybara在作为集成测试运行时不提供对它的访问.

原文地址:https://www.jb51.cc/ruby/269693.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐