qichunren
qichunren

Reputation: 4475

How to test view page(paginate) with rspec-rails2?

rails 3 rspec-rails 2

In controller:

def index   @users = User.paginate
  :page => params[:page],:per_pae => 5
end

In view:

<h1>User list</h1> 
<% @users.each do |user| %>
  <p>
    <%= user.name %>
  </p>
<% end %>
<%= will_paginate @users %>

Now I use rspec-rails 2 to test view.

require 'spec_helper'

describe "/users/index.html.erb" do   
  before(:each) do
    assign(:users, [
      stub_model(User),
      stub_model(User),
      stub_model(User,
      stub_model(User)
    ])
  end

  it "renders a list of contracts" do
    render
    rendered.should contain "User list"
  end
end

Now I use rspec common to test it.I got: undefined method `total_pages' for #

How to stub paginate or some other way to fix it?

Upvotes: 1

Views: 2706

Answers (2)

Zsolt Hanko
Zsolt Hanko

Reputation: 804

I use this solution:

view.stub(:will_paginate)

Upvotes: 5

heavysixer
heavysixer

Reputation: 2069

You want an instance of the will_paginate collection object:

before(:each) do
  page = 1
  per_page = 1
  total_entries = 4
  users = WillPaginate::Collection.create(page, per_page, total_entries) do |pager|
    pager.replace([stub_model(User), stub_model(User), stub_model(User), stub_model(User)])
  end
  assigns(:users, users)
end

This will give you access to all the attributes needed to correctly paginate.

Upvotes: 3

Related Questions