【发布时间】:2019-09-24 21:30:48
【问题描述】:
如何检测 CarQuery 的实例是否调用了具有特定参数的方法? (我认为这是我的问题,但如果我错了请告诉我)。
有没有更好的测试方法?
错误
Search#base_filters should call with_limit method on query_object when user_id is passed in
Failure/Error: expect(qbase).to have_received(:with_user_id).with(1)
(Double "CarQuery").with_user_id(1)
expected: 1 time with arguments: (1)
received: 0 times
搜索查询
class Search
def self.call(current_user, params)
new(current_user, params).call
end
def initialize(current_user, params)
@params = params
@current_user = current_user
end
def call
base_filters(CarQuery.new(@current_user)).relation
end
private
def base_filters(query_object)
query_object.with_user_id(@params[:user_id]) if @params[:user_id].present?
query_object
end
end
Rspec 测试
RSpec.describe Search, type: :model do
describe "#base_filters" do
it "should call with_limit method on query_object when user_id is passed in" do
current_user = create(:user)
qbase =spy('CarQuery')
expect(qbase).to have_received(:with_user_id).with(1)
Search.call(current_user, {user_id: 1})
end
end
end
【问题讨论】:
标签: ruby rspec rspec-rails ruby-on-rails-5.2