如何在_integration_测试中设置引用者

时间:2014-03-13 10:03:16

标签: ruby-on-rails rspec

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"

我该怎么做?

奖励积分如果解决方案告诉此规范存储其访问的每个网址的引荐(因此测试是健壮的)并且对其他规格(速度)没有影响。

2 个答案:

答案 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']