![](/img/trans.png)
[英]FactoryGirl Rspec ActionView::Template::Error: undefined method for nil:NilClass
[英]Rspec Capybara ActionView::Template::Error: undefined method `action' for nil:NilClass
我正在測試名為“訂單”的模型的編輯視圖。
以普通用戶身份測試頁面工作正常,並且測試通過:
scenario 'a registered user can actually edit the comment of his order' do
mycart = create(:cart)
vest = create(:product, name: 'vest', price: '250000')
jacket = create(:product, name: 'jacket-1', price: '300000')
line_vest = create(:line_item, product: vest, unit_price: vest.price, cart: mycart)
line_jacket = create(:line_item, product: jacket, unit_price: jacket.price, cart: mycart)
Capybara.current_session.driver.header 'Referer', root_path
order = create(:order, cart: mycart, user_id: 5)
user = FactoryGirl.create(:user, id: 5)
login_as(user)
visit edit_order_path(order)
fill_in 'Comment', with: 'This is the best order I have ever done'
click_button 'Update Order'
expect(page).to have_content 'This is the best order I have ever done'
end
如果我嘗試以管理員身份運行相同的測試,並編輯屬於另一個用戶的訂單上的注釋,則測試將失敗:
scenario 'an admin can edit the comment of any order' do
mycart = create(:cart)
vest = create(:product, name: 'vest', price: '250000')
jacket = create(:product, name: 'jacket-1', price: '300000')
line_vest = create(:line_item, product: vest, unit_price: vest.price, cart: mycart)
line_jacket = create(:line_item, product: jacket, unit_price: jacket.price, cart: mycart)
Capybara.current_session.driver.header 'Referer', root_path
order = create(:order, cart: mycart, user_id: 5)
admin = FactoryGirl.create(:user, :admin)
login_as(admin)
visit edit_order_path(order)
fill_in 'Comment', with: 'This is the best order I have ever done'
click_button 'Update Order'
expect(page).to have_content 'This is the best order I have ever done'
end
我得到這個錯誤:
Failure/Error: click_button 'Update Order'
ActionView::Template::Error:
undefined method `action' for nil:NilClass
無論如何,如果我運行Web服務器,並且作為管理員嘗試更新訂單(屬於任何用戶),它都可以正常工作,因此只是測試不起作用。
以下是相關的控制器行:
before_action :set_order, only: [:show, :update, :edit, :destroy]
def edit
unless (@order.user_id == current_user.id) or current_user.admin?
redirect_to :back, :alert => "You are not authorized to view this page."
end
end
def update
flash[:notice] = 'Order was successfully updated.' if @order.update(order_params)
respond_with(@order)
end
def set_order
@order = Order.find(params[:id])
end
我有一些類似的錯誤。
如果出現類似以下錯誤:
undefined method "method_name" for nil:NilClass
簡短的解釋是您的數據庫沒有實例化對象所需的視圖或控制器。 例如,如果您具有@ currency.get_symbol,則需要創建一個夾具或工廠,以便將貨幣插入數據庫以通過測試。
詳細說明:您可以閱讀本文以獲得更高級的說明和解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.