2011-08-16 18 views
22

Görüntüye eklenmiş bir bakış açım var (şimdi Kaminari gem ile) görünümüne eklendi. Hala kafamı RSpec'in sözdizimi etrafında tutmaya çalışıyorum ... bu yüzden sayfanın tarayıcıda iyi çalışmasından dolayı bunu başarmak için yardım arıyorum. Birçok kişi (muhtemelen böyle nedenlerle) kırılgan olduğu için görünüm özellikleri üzerinde kaşlarını farkındayım ama hala bazı @posts diziye mesajları stubbed atama amRSpec testi sayfalara göre ayrışmış (Kaminari)

geçen bu bir tutmak istiyorum. Ancak, diziler current_page'a yanıt vermez. Peki bunu RSpec'de nasıl ele almalıyım?

Failures: 

    1) posts/index.html.haml renders a list of posts 
    Failure/Error: render 
    ActionView::Template::Error: 
     undefined method `current_page' for #<Array:0x000001028ab4e0> 
    # ./app/views/posts/index.html.haml:31:in `_app_views_posts_index_html_haml__291454070937541541_2193463480' 
    # ./spec/views/posts/index.html.haml_spec.rb:39:in `block (2 levels) in <top (required)>' 

spec/views/posts/index.html.haml_spec.rb:

require 'spec_helper' 

describe "posts/index.html.haml" do 
    before(:each) do 
    ... 
    assign(:posts, [ 
     Factory.stub(:post), 
     Factory.stub(:post) 
    ])  
    view.should_receive(:date_as_string).twice.and_return("June 17, 2011") 
    ... 
    end 

    it "renders a list of posts" do 
    render 
    rendered.should have_content("June 17, 2011") 
    ... 
    end 
end 
+1

Seni şimdiden biliyorum başka bir cevabı kabul etti, ama b Yaptığın şey, kodunda bir hatayı kaçırdın. Yukarıdaki hata, denetleyicinizde @ posts.current_page öğesini çağırdığınızı ima etmektedir. @ Posts.first.current_page veya controller.current_page öğesinin geçerli olduğunu görebiliyorum, ancak @ posts.current_page muhtemelen değil. –

+0

iyi nokta! Yani, belki de kontrolörden dışarı çıkmalı mıyım? Kaminari'nin "current_page" olarak adlandırmayı umduğu şeyin tam olarak emin değilim? Sadece mesajların dizisi yanıt vermediği için * * başarısız olduğunu * biliyorum, ama haklısın, bu garip görünüyor? * Daha iyi bir cevabın kendini gösterip göstermediğini görmek için bunu biraz açık bırakacağım. * – Meltemi

+0

İlgili kontrolör kodunu da gönderebilir misin? –

cevap

44

Ayrıca aşağıda gibi bir şey yapabilirsiniz:

assign(:posts, Kaminari.paginate_array([ 
     Factory.stub(:post), 
     Factory.stub(:post) 
     ]).page(1)) 
+2

Bu yöntem Rails iskele koduna güzelce uyuyor. Sadece oluşturulan stub_model dizisini Kaminari.paginate_array (...) .sayfa (1) ve Viola! Ile sarın. Çalışma özellikleri. – scarver2

+1

'Kaminari.paginate_array (...). Sayfa (1)' da benim durumumda çalışıyor –

16

davranışında saplama gerektiğini, bu deneyin:

before(:each) do 
    ... 
    posts = [Factory.stub(:post), Factory.stub(:post)] 
    posts.stub!(:current_page).and_return(1) 
    posts.stub!(:total_pages).and_return(2) 
    assign(:posts, posts)  
    view.should_receive(:date_as_string).twice.and_return("June 17, 2011") 
    ... 
end 
+3

Parlak! Teşekkürler! İzleyen başka herkes için ben de:: current_value' ile aynı şekilde iki: 'num_pages' ve': limit_value 'yöntemlerini kullanmak zorunda kaldım ve her biri için döndürdüğüm değer bir tamsayıdır '(1)'. Özellikleri hızla geçen ... teşekkürler! – Meltemi

+0

Eh * I * sizi + 1'leyecektir. Ben yeşil onay işareti olsa :( – jaydel

+1

Ayrıca ben total_pages 'saplama vardı. Teşekkürler! –