かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

RSpec メソッドの有無をテストしたい

メソッドがある事をテスト

let(:foo) { create :foo }
it 'foo has #method' do
  expect(foo).to respond_to(:method)
end

又は

expect(foo.respond_to?(:method)).to be true

メソッドがない事をテスト

let(:foo) { create :foo }
it 'foo has #method' do
  expect(foo.respond_to?(:method)).to be false
end
ポエム

exists みたいなメソッドでチェックできるのかと思ったけど違った。
respond_tomethod_defined との違いがよく解ってないのだけれど、respond_to はクラスのインスタンスオブジェクトに使って、method_defined はクラスそのもにに使うって感じなのだろうか… なるほどわからん

そして、RSpec 全然わからん…
いろんな Decorator が include してる共通の module の単体テストってどう書いて良いのかも全くわからない…
解らないことが複数重なっていて、思っていることがすぐに書けない、書き方が分からないという本質でない所に時間がかかる上に、ちょっとした変更を試すにも docker-compose を通すと超遅い。Try & Error にかかる待ち時間が長さから来るイライラも相まって Rails プロジェクトへの苦手意識ばかりが高まっていて正直辛い。 (たぶんRailsの "魔法" とか "おまじない" みたいなのが多いのが、あまり好きじゃないっぽい。どう動作しているかコードを見て理解しづらいから。


[参考]

現場で使える Ruby on Rails 5速習実践ガイド

現場で使える Ruby on Rails 5速習実践ガイド