使用will_paginate进行排序的Rspec

时间:2015-05-04 23:22:38

标签: ruby-on-rails ruby rspec will-paginate

我在尝试运行rspec测试时遇到了不好的时间。问题似乎在以下几行:

expect(assigns(:posts).count).to eq 2

我得到0,但预计会有2.

我的 rspec 测试:

RSpec.describe Portfolio::BlogController, type: :controller do
  let(:posts) {build_stubbed_list(:post, 2)}
  let(:post) {build_stubbed :post}

  specify '#index' do
    expect(Post).to receive(:paginate).with(page: '2').ordered.
                           and_return( posts.paginate(per_page: 2) )
    get :index, page: 2

    expect(assigns(:posts).count).to eq 2
    expect(response).to render_template 'index'
  end
end

我的控制器

class BlogController < ApplicationController
  def index
    @posts = Post.order('created_at DESC').paginate(:page => params[:page])
  end
end

如果我从我的控制器中移除order并从我的测试中移除ordered,一切正常。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您需要使用receive_message_chain

答案 1 :(得分:0)

我解决了将以下内容添加到我的模型中:

default_scope { order('created_at DESC') }

在我的测试中,ordered行动不是必需的。