Ruby 如何期望RSpec应该收到一些(但不是全部)参数?
期望使用任何参数调用barRuby 如何期望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): 还有另一种方法
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