我正在尝试用rspec,factory_girl和capybara编写集成测试.我也安装了黄瓜,但我没有使用它(据我所知).
我基本上想用我的用户预填充数据库,然后转到我的主页并尝试登录.它应该重定向到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
Run Code Online (Sandbox Code Playgroud)
返回:
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
Run Code Online (Sandbox Code Playgroud)
相反,它会重定向到我的please_login_path - 如果登录因任何原因失败(或者如果未设置session [:user_id]),则会发生这种情况.
如果我尝试放入session.inspect,它将作为一个nil对象失败.
如果我尝试在控制器测试中执行此操作(/rspec/controllers/sessions_spec.rb),我可以毫无问题地访问会话,并且我可以调用session [:user_id]