0

我有一个具有以下代码的辅助方法。它是显示在网站多个页面上的 AJAX 购物车的一部分

module CartsHelper
  def switch_buttons
    unless URI(request.referer).path==new_order_path && !current_page?(store_path) \
      || current_page?(new_order_path)
      @checkout = true
    else
      @checkout = false
    end
  end
end

这是购物车的局部视图

<h2> Your Cart</h2>
<table>
    <%= render(cart.line_items)%>

    <tr class ="total_line">
        <td colspan="2">Total</td>
        <td class="total_cell"><%= number_to_currency(cart.total_price)%></td>
    </tr>
</table>

<% if switch_buttons %>
    <%= button_to 'Checkout', new_order_path, method: :get %>
    <%= button_to 'Empty cart', cart, method: :delete,
        confirm: 'Are you sure?', remote: true %>
<% else %>
<%= button_to 'Cancel Order', store_path, method: :get %>    
<% end %>

URI(request.referer).path 在我的所有测试中都给出了错误的参数(预期的 URI 对象或 URI 字符串)错误。它适用于实际的浏览器。我猜这是因为测试实际上并没有通过 url,所以 request.referer 是 nil 吗?有什么方法可以设置测试以通过此代码?

4

1 回答 1

0

两件事情:

首先,这回答了您的主要问题:

在 Rails 中测试时如何设置 HTTP_REFERER?

其次,设置 request.referer 不是给定的。当您从前一页导航时,大多数浏览器都会提供标题;大多数人在您手动输入 URL 时不会这样做。不能假设 HTTP 客户端总体上会这样做,您必须准备好从该属性中获取 nil。

于 2013-11-08T16:49:19.787 回答