0

以下は、rspec コントローラー テストでテンプレート エラーを引き起こす部分的な形式です。

<%= 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 は new で次のように定義されています。

  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 呼び出しでいっぱいです。

rspec テストの部分的な形式で @expense_for に値を渡すにはどうすればよいですか? ありがとう。

4

1 に答える 1

1

@expense_forテストで nil の場合has_create_right?は false であるため、@expense_for設定されることはありません。else 句ではなく、アクションの開始時に@expense_fortoを設定してみてください。[]

于 2012-08-24T02:41:45.170 に答える