RSpecで、型チェックを行うときに使うMatcher
私個人としては、Rubyのような動的型付けの言語のテストコードで、戻り値の型をチェックするようなコードを書くのはナンセンスだと思っているのだけれど(Rubyのようなダックタイピングが可能な言語なのであれば、それがどんな型かではなく、どんな特性を備えているべきかで仕様を定めるべきだと感がている)、仕事でRubyのコードを触っていると案外型チェックをする目的のRSpecなコードを目にすることがある。
そこで用いられているコードはこんな具合のものだ。
code:ruby
values = Hoge.str_method
expect(values.is_a? String).to be_truthy
多分、ネットでRSpecで型の確認をするという記事を探すとまっさきに出てくるのがこの手のコードなので、それを丸っとコピーしてつかっているからこういうコードになるんだろうと思う。
もちろんこれでも間違っちゃいないし、やりたいことは達成できているので問題ないと思える。
でも、個人的にはRSpecにせっかく専用のmatcherが用意されているのだから、それをうまく使うべきだと思う。
専用のmatcherを使うことでSpecとして読み下しやすくなってコードの意図が明瞭になると思う。
そもそも論としては冒頭に書いたとおり型ではなく振る舞いでSpecを決めるべきだと思うけれども、型チェックが要求される場合には、これらのmatcherを使うことをおすすめしておきたい。