2013-06-21 75 views
4

鑑於以下輔助方法,我將如何使用rspec正確地測試該方法?測試rails helper呈現部分

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 
+0

哪一行產生此錯誤? – samuil

+0

我已經更新了這個問題w /一些額外的細節 –

回答

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 

注意,這不會叫你部分的實際代碼。

1

should_receive的參數應該是一個代替的符號串。至少我還沒有看到字符串在文檔中使用(https://www.relishapp.com/rspec/rspec-mocks/v/2-14/docs/message-expectations

所以,與其

helper.should_receive('render').with(any_args) 

使用此

helper.should_receive(:render).with(any_args) 

不知道這是否能解決問題,但至少在這個是可能導致您的錯誤消息的錯誤。

+0

我嘗試使用符號,但我仍然收到錯誤。很高興知道我應該只使用符號! –

0

在這裏你有

can't convert nil into String

你傳遞一個2個空數組作爲參數傳遞給函數皈依的問題,但在紅寶石空數組不是零,然後渲染的參數應該是一個字符串,不知道但要儘量參數測試轉換爲字符串,像這樣:

datatable(rows.to_s, headers.to_s) 
+0

但是這些參數需要是數組,因爲我在部分內部循環了它們。 –