带有命名参数的 RSpec 测试方法

elf*_*elf 2 ruby rspec ruby-on-rails

我正在尝试测试接收命名参数的方法调用,如下所示:

expect(@fake_task_search).to receive(:search).with({:query=>"a"})
        @repo.all({query:  "a"})
Run Code Online (Sandbox Code Playgroud)

和 SUT

def all(params)
  @search_task.search(query: params[:query]).load
end
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我收到了这个:错误数量的参数(0 代表 1)。

任何帮助都会很棒。

谢谢

ser*_*ish 5

以与调用方法相同的方式调用匹配器 .with(query: "a")

class Repo
  def initialize(search_task)
    @search_task = search_task
  end

  def all(params)
    @search_task.search(query: params[:query])
  end
end

it "calls" do
  @search_task = SearchTask.new
  @repo = Repo.new(@search_task)

  expect(@search_task).to receive(:search).with(query: "a")

  @repo.all({query:  "a"})
end
Run Code Online (Sandbox Code Playgroud)