Ответ 1
Вы также можете сделать что-то вроде ниже:
assign(:posts, Kaminari.paginate_array([
Factory.stub(:post),
Factory.stub(:post)
]).page(1))
У меня есть спецификация представления, которая проходила, но теперь нарушена, что к представлению добавлено разбиение на страницы (через камень Каминари). Я все еще пытаюсь разобраться в синтаксисе RSpec... так что вам нужна помощь в том, чтобы передать это, поскольку страница работает отлично в браузере. Я знаю, что многие люди нахмурились от спецификации вида за хрупкость (вероятно, по причинам, подобным этому), но я все равно хочу, чтобы эта передача проходила
Я назначаю некоторые stubbed сообщения в массив @posts. Но массивы не реагируют на current_page
. Итак, как мне обращаться с этим в 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
Вы также можете сделать что-то вроде ниже:
assign(:posts, Kaminari.paginate_array([
Factory.stub(:post),
Factory.stub(:post)
]).page(1))
Вы должны заглушить поведение, попробуйте следующее:
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