4

次のヘルパー メソッドが与えられた場合、これを使用して適切にテストするにはどうすればよいでしょうrspecか。

  def datatable(rows = [], headers = [])
    render 'shared/datatable', { :rows => rows, :headers => headers }
  end

  def table(headers = [], data = [])
    render 'shared/table', headers: headers, data: data
  end

次のことを試しましたが、エラーが発生します。can't convert nil into String

describe 'datatable' do
  it 'renders the datatable partial' do
    rows = []
    headers = []
    helper.should_receive('render').with(any_args)
    datatable(rows, headers)
  end
end

Rspec 出力

Failures:

  1) ApplicationHelper datatable renders the datatable partial
     Failure/Error: datatable(rows, headers)
     TypeError:
       can't convert nil into String
     # ./app/helpers/application_helper.rb:26:in `datatable'
     # ./spec/helpers/application_helper_spec.rb:45:in `block (3 levels) in <top (required)>'

./app/helpers/application_helper.rb:26

render 'shared/datatable', { :rows => rows, :headers => headers }

ビュー/共有/_datatable.html.haml

= table headers, rows

ビュー/共有/_table.html.haml

%table.table.dataTable
  %thead
    %tr
      - headers.each do |header|
        %th= header
  %tbody
    - data.each do |columns|
      %tr
        - columns.each do |column|
          %td= column
4

4 に答える 4

8

ヘルパーが正しいパラメーターを使用して正しいパーシャルを呼び出すことをテストしたいだけの場合は、次のことができます。

describe ApplicationHelper do

  let(:helpers) { ApplicationController.helpers }

  it 'renders the datatable partial' do
    rows    = double('rows')
    headers = double('headers')

    helper.should_receive(:render).with('shared/datatable', headers: headers, rows: rows)

    helper.datatable(rows, headers)
  end

end

これは部分的に実際のコードを呼び出さないことに注意してください。

于 2013-06-25T18:38:02.893 に答える
0

ここで変換の問題があります

nil を String に変換できません

2つの空の配列をパラメーターとして関数に渡しますが、ルビーの空の配列はnilではありません。レンダリングのパラメーターは文字列でなければなりませんが、テストのパラメーターを次のように文字列に変換してみてください:

datatable(rows.to_s, headers.to_s)
于 2013-06-21T14:28:58.217 に答える