【问题标题】:How to set the referrer in an _integration_ test如何在 _integration_ 测试中设置引荐来源网址
【发布时间】:2014-04-17 23:23:50
【问题描述】:

Rspec 无法访问 HTTP 引荐来源网址。

我的user_sessions#create 操作包含:redirect_to :back,Rails 只能通过读取 HTTP 引用来执行。

Stackoverflow 包含大量关于如何在 controller 规范中设置/模拟/任何引用者的帖子。一般的氛围是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"

我该怎么做?

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

【问题讨论】:

    标签: ruby-on-rails rspec


    【解决方案1】:
    Capybara.current_session.driver.header 'Referer', 'http://example.com'
    

    看起来你正在使用Capybara,你可以使用 Capybara 来显式设置引用者。您必须随时更新它,如果您需要删除它,您可以将其设置为nil

    也许更干净一点:

    referer = 'http://example.com'
    Capybara.current_session.driver.header 'Referer', referer
    

    【讨论】:

    • 谢谢。 Capybara.current_session.driver.header 'Referer', page.current_path 就在 click_link "login" 工作之前。
    • 怎么样? page.current_path 不是 nil 吗?
    • 抱歉,我太早点击提交该评论。我已经让它工作了。我稍后会提交工作版本。
    • 工作代码是……在 spec_helper.rb 中:Capybara.server_port = 4000(如果您是 ICQ 用户,显然选择不同的端口。)在集成测试中:store_path = "http://localhost:4000#{page.current_path}"click_link "login"@987654330 @
    【解决方案2】:

    这里是用于实现redirect_to方法的代码:

    if referer = request.headers["Referer"]
      redirect_to(referer, :status=>status)
    else
      raise RedirectBackError
    end
    

    你试过直接设置request.headers['Referer']吗?

    【讨论】:

    • 这似乎是正确的道路。如果只有我们的答案可以结合起来。 . .
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 2011-07-15
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多