2011-08-16 10 views
22

Tôi có thông số kỹ thuật xem đã qua nhưng bị hỏng ngay khi phân trang (qua đá quý Kaminari) đã được thêm vào chế độ xem. Tôi vẫn đang cố gắng để có được đầu của tôi xung quanh cú pháp của RSpec ... do đó, tìm kiếm sự giúp đỡ trong việc này để vượt qua khi trang hoạt động tốt trong trình duyệt. Tôi biết rằng nhiều người cau mày về thông số kỹ thuật xem vì dễ vỡ (có thể vì những lý do như thế này) nhưng tôi vẫn muốn giữ số này quaKiểm tra RSpec bị hỏng bởi phân trang (Kaminari)

Tôi đang gán một số bài đăng gốc cho mảng @posts. Nhưng các mảng không trả lời current_page. Vậy làm thế nào tôi nên xử lý điều này trong RSpec?

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

Tôi biết bạn đã chấp nhận một câu trả lời khác, nhưng tôi lo ngại rằng b y làm stubbing bạn đã làm rằng bạn chỉ stubbed ra một lỗi trong mã của bạn. Lỗi ở trên ngụ ý rằng bạn đang gọi @ posts.current_page trong bộ điều khiển của bạn. Tôi có thể thấy @ posts.first.current_page hoặc controller.current_page là hợp lệ, nhưng @ posts.current_page có thể không phải là. –

+0

điểm tốt! vì vậy, tôi nên, có lẽ là stubbing ra khỏi bộ điều khiển? Tôi không hoàn toàn chắc chắn những gì Kaminari dự kiến ​​sẽ gọi là 'current_page' trên?!? Tôi chỉ biết spec * là * thất bại vì mảng bài viết không trả lời nó ... nhưng, bạn nói đúng, điều đó có vẻ lạ? * Tôi sẽ để nó mở ra một chút để xem liệu có một câu trả lời hay hơn không. * – Meltemi

+0

Bạn cũng có thể đăng mã điều khiển liên quan không? –

Trả lời

44

Bạn cũng có thể làm điều gì đó như dưới đây:

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

Phương pháp này phù hợp với mã Rails scaffolded độc đáo. Chỉ cần bọc mảng stub_model được tạo ra với trang Kaminari.paginate_array (...). (1) và Viola! Thông số kỹ thuật làm việc. – scarver2

+1

'Kaminari.paginate_array (...). Trang (1)' cũng hoạt động trong trường hợp của tôi –

16

Bạn nên còn sơ khai hành vi, thử điều này:

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

Brilliant! Cảm ơn! Đối với bất cứ ai khác xem tôi cũng đã phải đưa ra hai phương pháp khác ': num_pages' và': limit_value' trong cùng một kiểu với ': current_value' ở trên ... và giá trị tôi trả về cho mỗi phương thức là số nguyên '(1)'. Thông số kỹ thuật đi qua bơi ... cảm ơn! – Meltemi

+0

Vâng * I * sẽ +1 bạn. Tôi không thể đánh dấu màu xanh lá cây mặc dù: ( – jaydel

+1

Tôi cũng phải khai báo 'total_pages'. Cảm ơn! –