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类型,则应取消强制转换为过程的&