Rspec无法访问HTTP引荐来源。
我的user_sessions#create
操作包含:redirect_to :back
,Rails只能通过读取HTTP引荐来执行。
Stackoverflow包含大量有关如何设置/模拟/ 控制器规范中的引用者的帖子。一般的氛围是request.env["HTTP_REFERER"] = etc etc
。
但我需要redirect_to :back
才能在集成测试中工作,如下所示:
click_link "login"
page.current_path.should == "/login"
fill_in "user_session_email", :with => @user.email
fill_in "user_session_password", :with => @user.password
click_on "submit_user_session"
page.current_path.should == new_order_path
click_on "submit_order"
我该怎么做?
奖励积分如果解决方案告诉此规范存储其访问的每个网址的引荐(因此测试是健壮的)并且对其他规格(速度)没有影响。
答案 0 :(得分:7)
Capybara.current_session.driver.header 'Referer', 'http://example.com'
看起来你正在使用Capybara,你可以使用Capybara来明确设置引用者。您需要在需要更改时更新它,如果需要将其删除,可以将其设置为nil
。
也许有点清洁:
referer = 'http://example.com'
Capybara.current_session.driver.header 'Referer', referer
答案 1 :(得分:2)
以下是用于实现redirect_to方法的代码:
if referer = request.headers["Referer"]
redirect_to(referer, :status=>status)
else
raise RedirectBackError
end
您是否尝试过直接设置request.headers['Referer']
?