Ruby 我可以将响应调用的内容传递给RSpec';谁是找零的?

Ruby 我可以将响应调用的内容传递给RSpec';谁是找零的?,ruby,rspec,duck-typing,Ruby,Rspec,Duck Typing,我有这样的代码 it 'transfers the account balance to the recipient' do expect(&transaction_creator.method(:call)).to change(account, :balance_cents).by(54_321_01) end 这是可行的,但感觉不对。我的印象是,响应调用的东西应该能够像proc或lambda一样工作,因为Ruby的duck类型。但是,如果我做了expect(&transact

我有这样的代码

it 'transfers the account balance to the recipient' do
  expect(&transaction_creator.method(:call)).to change(account, :balance_cents).by(54_321_01)
end
这是可行的,但感觉不对。我的印象是,响应
调用的东西应该能够像proc或lambda一样工作,因为Ruby的duck类型。但是,如果我做了
expect(&transaction\u creator)

wrong argument type TransactionCreator (expected Proc)
如果我做了
expect(事务\u创建者)
,我会得到

expected #balance_cents to have changed by 5432101, but was not given a block

是否有任何方法可以简化
和transaction\u creator.method(:call)

只是一个猜测,但是您可能需要为
transaction creator
定义
to\u proc
,以使
expect(&transaction\u creator)
工作。毕竟
&:foo
调用
Symbol#to_proc
&transaction_creator.method(:call)
调用
method#to_proc

class Foo ; end
Foo.new
[].map(&foo)
TypeError: wrong argument type Foo (expected Proc)

class Foo ; def to_proc ; -> {} ; end ; end
[].map(&foo)
=> []
此外,如果您依赖duck类型,则应取消强制转换为
过程的
&