編寫某些控制器的測試中,使用render_views
檢查一些部分呈現....Rspec的控制器測試:未定義方法 'orders_path'
describe PromoCodeController do
render_views
describe "GET 'show" do
... a bunch of tests
it "renders 'used' partial when promo code has already been used" do
@promo_code = create(:promo_code)
@user.stub(:promo_used?).and_return(true)
get 'show', :slug => @promo_code.slug
expect(response).to render_template(:partial => 'promo_code/_used')
end
它加載在_used
局部
<article>
<p><%= @promo.description.html_safe %></p>
<p>Sorry, it appears this promo code has already been used. Please try again or contact us directly.</p>
<%= link_to "View Order", orders_path(@order), class: "box-button-black", data: { bypass: true } %>
</article>
但符與:
undefined method `orders_path' for #<#<Class:0x007fd4069d06e8>:0x007fd401e3e518>
關於如何 (一)忽略了Rails的鏈接,這是風馬牛不相及的測試 (B)在測試中包括一些認識到,鏈接 (三)存根它(萬不得已,我認爲)
一切我到目前爲止已經試過沒有超過錯誤。
編輯:
orders_path
錯了,應該是order_path
。改變後,我得到:
ActionView::Template::Error:
No route matches {:controller=>"order", :action=>"show", :id=>nil}
所以部分正在尋找@order
。我試着用controller.instance_variable_set(:@order, create(:order))
來設置它,但是在部分它會回到nil
。
通過在視圖中添加<% @order = Order.last %>
進行快速測試,部分綠色通過。如何將var @order
傳遞給_used
部分現在是個問題。
你加訂購資源到你的config/routes.rb? –
它應該是order_path嗎? – margo