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

ste*_*ble 5 rspec ruby-on-rails

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"
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

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

Ecn*_*lyr 7

Capybara.current_session.driver.header 'Referer', 'http://example.com'
Run Code Online (Sandbox Code Playgroud)

看起来你正在使用Capybara,你可以使用Capybara来明确设置引用者.您需要在需要更改时更新它,如果需要将其删除,可以将其设置为nil.

也许有点清洁:

referer = 'http://example.com'
Capybara.current_session.driver.header 'Referer', referer
Run Code Online (Sandbox Code Playgroud)