2012-08-24 49 views
0

這是導致模板錯誤RSpec的控制器測試部分形式:如何在rspec控制器測試中爲rails 3.2.8應用程序傳遞值中的變量?

<%= f.label :expense_for, '欄目:'%> 
<%= f.select :expense_for, @expense_for.map { |expense| [expense, expense] }, {:include_blank => true, :selected => @expense.expense_for } %> 

我們使用render_views在費用控制試驗。由於@expense_for是nil在創建測試,所以.MAP導致錯誤:

[31mActionView::Template::Error:←[0m 
     ←[31mundefined method `map' for nil:NilClass 

這會導致上述錯誤的RSpec的代碼是:

get 'create', :expense => e, :expense_for => ['a','b'] 

在支出控制器,@expense_for在新被定義爲:

def new 
    if has_create_right? 
     @expense = Expense.new(params[:expense], :as => :role_new) 
     if @expense.expense_type == 'production' 
     @expense_for = return_expense_for_production 
     elsif @expense.expense_type == 'overhead' 
     @expense_for = return_expense_for_overhead 
     else 
     @expense_for = [] 
     end 
    end 

@expense_for中充滿了ajax調用。

如何將值傳遞給@expense_for rspec測試的部分形式?謝謝。

回答

1

如果@expense_for在你的測試中爲零,那麼has_create_right?是假的,所以@expense_for永遠不會被設置。嘗試在操作開始時將@expense_for設置爲[],而不是在else子句中。

+0

將@ expense_for = []移至new方法的頂部,並且錯誤相同。是因爲@expense_for是在new方法中定義的,所以在create方法中它是nil?在rspec的情況下,has_create_right?是真的。 – user938363

+0

@expense_for = [] if @ expense_for.nil?被放在create方法中,它解決了rspec和case傳遞中的nil obj問題。 – user938363

相關問題