2012-03-13 1 views
2

私はRspecで私のビューをテストしようとしています。私の見解では、私はDraperによってDecoratorを生成しています。このデコレータはdecent_exposure gemによって公開されています。rspecによるテストビューのドレープデコレータ

私はそのような私のRSpecのテスト作成:私はドレイパーデコレータを生成し、私のヘルパーの私のスタブで

require 'spec_helper' 

describe "boats/show.html.slim" do 

    let(:boat_decorate) { BoatDecorator.new(get_boat) } 
    let(:search) { Search.new } 

    before do 
    view.stub(:boat_decorate) { boat_decorate } 
    view.stub(:search) { search } 
    render :template => 'boats/show.html.slim' 
    end 

    it 'should see titlte' do 
    rendered.should have_selector(:h1, :content => boat_decorate.title) 
    end                                             
end 

を。このデコレータには、ヘルパーlink_toを呼び出すメソッドがあります。

class BoatDecorator < ApplicationDecorator 

    decorates :boat 

    def region_link 
    h.link_to region_name, '#', :title => region_name                                 
    end 

end 

しかし、私はこのテストを起動すると、私はエラーを持っている:

1) boats/show.html.slim should see titlte 
    Failure/Error: render :template => 'boats/show.html.slim' 
    ActionView::Template::Error: 
     undefined method `link_to' for nil:NilClass 

私は私のデコレータでスタブすべてのヘルパーコールを望んでいません。どうすればいいですか?私たちは、デコレータの仕様のように行うとセットアップに追加必要

+0

これはあなたの質問に直接答えるものではありませんが、デコレータでビューをテストする理由は何ですか?デコレータを単独でテストしてみませんか?言い換えれば、 '#region_link'が期待されるHTMLを返すと主張するだけですか? (私のアプリケーションの1つでデコレータをテストする方法です)。 – myabc

+0

私はデコレーターテストでそれを行います。私はビューをテストして、自分のビューに必要なすべてのメソッドをデコレータに実装していることを確認します。 – shingara

答えて

6

ApplicationController.new.set_current_view_context

require 'spec_helper' 

describe "boats/show.html.slim" do 

    let(:boat_decorate) { BoatDecorator.new(get_boat) } 
    let(:search) { Search.new } 

    before do 
    ApplicationController.new.set_current_view_context 
    view.stub(:boat_decorate) { boat_decorate } 
    view.stub(:search) { search } 
    render :template => 'boats/show.html.slim' 
    end 

    it 'should see titlte' do 
    rendered.should have_selector(:h1, :content => boat_decorate.title) 
    end                                             
end 
0

別のアプローチは、RSpecのとカピバラとの分離にデコレータのクラスをテストすることがあります。 Hereは、このアプローチを使用した例のコードです。

関連する問題