ruby-on-rails 当尝试在控制器规范中测试模型时,Rails RSpec失败

ee7vknir  于 2023-08-08  发布在  Ruby
关注(0)|答案(1)|浏览(135)

我已经搜索了很多,看看是否有解决这个问题的方法,我还没有看到任何人报告这个问题,让我补充一下,我是一个rails新手。
Ruby版本:3.2.2 Rails版本:7.0.5.1 Rspec Rails版本:6.0.0

控制器:

def index
    books = Book.all.limit(limit).offset(get_books_params[:offset])

    render json: BooksRepresenter.new(books).as_json
end

字符串

测试:

RSpec.describe Api::V1::BooksController, type: :controller do
  it 'has a max limit of 100' do
    expect(Book).to receive(:limit).exactly(1).times.with(100).and_call_original

    get :index, params: { limit: 999 }
  end
end

测试输出:

Failure/Error: expect(Book).to receive(:limit).exactly(1).times.with(100).and_call_original
     
(Book(id: integer, title: string, created_at: datetime, updated_at: datetime, author_id: integer) (class)).limit(100)
           expected: 1 time with arguments: (100)
           received: 0 times


因此,从我所看到的情况来看,测试期望调用来自Book,但是因为Book.all.limit之前被调用,所以似乎期望没有识别.limit被调用。
任何帮助/解释将不胜感激

az31mfrm

az31mfrm1#

这里不需要所有
只需做books = Book.limit(limit).offset(get_books_params[:offset])
删除所有然后做

before do
  allow(Book).to receive(:limit).and_call_original
end

it do
  expect(Book).to have_received(:limit).exactly(1).times.with(100)
end

字符串

相关问题