我正在尝试编写测试以确保用户在登录后重定向到正确的页面。但问题是用户在到达我要检查的页面之前会经历两次重定向。目前使用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/>
答案 0 :(得分:1)
您可以使用post_via_redirect
代替post
来执行测试,从而使您的请求规范符合重定向。
Rspec请求测试是Rails&#39;的包装器。内置集成测试,可以使用更广泛的helper methods集。