Rspec redirect_to遵循多个重定向

时间:2014-12-04 03:27:51

标签: ruby-on-rails rspec

我正在尝试编写测试以确保用户在登录后重定向到正确的页面。但问题是用户在到达我要检查的页面之前会经历两次重定向。目前使用expect(subject).to redirect_to(accounts_plan_page)会在第一次重定向时停止重定向链,而不会继续到最后一页。所以登录流程为localhost/signin -> localhost/ -> localhost/account/plan。我想测试用户是否到达/account/plan但是redirect_to在根路径处停止。反正有没有rspec跟随最终重定向而不是在第一个重定向结束?

缩写为login_spec:

describe 'login', type: :request do
  let(:user) { FactoryGirl.create(:user) }
  subject { post '/signin', { user: { email: user.email, password: user.password } } }

  it 'redirects a user properly' do
    accounts_plan_page = 'http://127.0.0.1:3000/account/plan'
    if user.account.requires_metered?
      expect(subject).to redirect_to(account_plans_page)
    end
  end
end

这会返回

的内容
Expected response to be a redirect to <http://127.0.0.1:3000/account/plan> but was a redirect to <http://127.0.0.1:3000/>

1 个答案:

答案 0 :(得分:1)

您可以使用post_via_redirect代替post来执行测试,从而使您的请求规范符合重定向。

Rspec请求测试是Rails&#39;的包装器。内置集成测试,可以使用更广泛的helper methods集。