将GET参数传递给Capybara的控制器

时间:2013-12-17 12:01:32

标签: ruby-on-rails testing rspec devise capybara

使用Capybara测试令牌认证的正确方法是什么?这就是我所拥有的:

describe ApplicationController do
  let!(:user) { create :user, authentication_token: 1 }

  specify "token should work now" do
    visit "/?auth_token=#{user.authentication_token}"
    # get :index
    response.should_not redirect_to(new_user_session_url)
  end

  specify "token shouldn't work in the future" do
    Timecop.travel(2.weeks)
    visit "/?auth_token=#{user.authentication_token}"
    # get :index
    response.should redirect_to(new_user_session_url)
    Timecop.return
  end
end

如果我没有get :index行,则测试失败。但是如果我注释掉那一行,那么测试就会被保存,但这不应该是正确的方法,因为我的visit就高于它。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

事实证明visit没有将变量传递给控制器​​。将其更改为get :index, auth_token: user.authentication_token可解决此问题。