Ruby 如何期望RSpec应该收到一些(但不是全部)参数?

Ruby 如何期望RSpec应该收到一些(但不是全部)参数?,ruby,rspec,expectations,Ruby,Rspec,Expectations,期望使用任何参数调用bar class Foo def bar(a, b) ... Foo.should_receive( :bar ) 期望:baz和:qux作为参数传入 如何期望第一个参数等于:baz,而不关心其他参数?使用anything匹配器: Foo.should_receive( :bar ).with( :baz, :qux ) 对于rspec1.3当您的方法接收到一个散列作为参数时,任何东西都不起作用,因此请尝试使用散列,包括(:key=>val): 还有另一种方法

期望使用任何参数调用bar

class Foo
  def bar(a, b)
  ...

Foo.should_receive( :bar )
期望:baz和:qux作为参数传入


如何期望第一个参数等于:baz,而不关心其他参数?

使用
anything
匹配器:

Foo.should_receive( :bar ).with( :baz, :qux )

对于rspec1.3
当您的方法接收到一个散列作为参数时,任何东西都不起作用,因此请尝试使用
散列,包括(:key=>val)


还有另一种方法,那就是
receive
的块形式:


这很有效。需要注意的是,每个参数都需要一个
anything
。我不确定它是否是在之后添加的,但RSpec有任何参数,因此对于
bar(a,b,c)
您可以执行
Foo.应该接收(:bar)。使用(:baz,any_args)
非常感谢@rubyprince,很棒的提示!我发现,除非是最后一个论点,否则任何事情都是行不通的,这是令人沮丧的。这不起作用:
.with(:baz,anything,:foo)
Foo.should_receive(:bar).with(:baz, anything)
Connectors::Scim::Preprocessors::Builder.
    should_receive(:build).
    with(
      hash_including(:connector => connector)
      ).
    and_return(preprocessor)
}
expect(Foo).to receive(:bar) do |args|
  expect(args[0]).to eq(:baz)
end