received? はdoubleで作ったらstubしないと使えない
やりたいこと
あるメソッドが呼ばれかどうかことをテストしたい
ハマったこと
code:ruby
invitation = double('invitation')
user.accept_invitation(invitation)
expect(invitation).to have_received(:accept)
原因
doubleで作ったメソッドはスタブしたオブジェクトじゃないといけなかった On a spy objects or as null object doubles this works for any method, on other objects the method must have been stubbed beforehand in order for messages to be verified.
これならOK
code:ruby
invitation = double('invitation')
allow(invitation).to receive(:accept).and_return(true) # stubする
user.accept_invitation(invitation)
expect(invitation).to have_received(:accept)