Rspec 使用 will_paginate 进行排序

Rspec for a ordering using 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 一切正常。有什么想法吗?

您需要使用 receive_message_chain

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

default_scope { order('created_at DESC') }

ordered 操作在我的测试中不是必需的。