Тест RSpec, разбитый по нумерации страниц (Kaminari) - PullRequest
23 голосов
/ 16 августа 2011

У меня есть спецификация вида, которая проходила, но теперь не работает, когда в представление была добавлена ​​нумерация страниц (через камень Kaminari). Я все еще пытаюсь разобраться с синтаксисом RSpec ... поэтому ищу помощь в том, чтобы заставить это пройти, поскольку страница прекрасно работает в браузере. Я знаю, что многие люди недовольны взглядами на хрупкость (вероятно, по таким причинам), но я все же хотел бы, чтобы этот проход проходил

Я присваиваю несколько заглушенных сообщений массиву @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

Ответы [ 2 ]

45 голосов
/ 16 января 2012

Вы также можете сделать что-то вроде ниже:

assign(:posts, Kaminari.paginate_array([
        Factory.stub(:post),
        Factory.stub(:post)
      ]).page(1))
17 голосов
/ 16 августа 2011

Вы должны заглушить поведение, попробуйте это:

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
...