【RSpec】shoulda-matchersでenum,delegateのテスト
shoulda matchers
shoulda-matchersはvalidationやassociationのテストを超簡単に書ける便利マッチャ集みたいなgem.
example
class User < ActiveRecord::Base belongs_to :company has_one :profile delegate :name, to: :profile delegate :name, to: :company, prefix: true end class Profile < ActiveRecord::Base belongs_to :user enum gender: %i(male female) end class Company < ActiveRecord::Base has_many :users end
enum
define_enum_forを利用する.
describe Profile do describe 'enums' do it { is_expected.to define_enum_for(:male, :female) end end
delegate
delegate_methodを利用する.
describe User do describe 'delegations' do it { is_expected.to delegate_method(:name).to(:profile) } it { is_expected.to delegate_method(:name).to(:company).with_prefix } end end
そもそも必要なのか?
Railsにおいては,mvalidationやassociation,delegation,enumなどの定義はDSL的に宣言するだけである. それをわざわざテストを行う必要があるのか,という疑問は常に発生する(気がする).
まあ普通はいらんやろ,っていうのが正直な感想. これらのテストが必要とされる場面あるのかなー って考えた時に思いついたのが以下の2つ.
- カバレッジが下がるのが腹立つ
- Coverallsなどでバッジ貼ってる場合は特に
- RSpecを仕様書として使う(spec n. 仕様書)
- コード本体じゃなく記述されたテスト見て仕様把握するタイプの人間がいる場合とか?
ぼく個人としては前者. はじめて自projectでバッジ貼ったらテンション上がるし, どうせならかっこいいまま保ちたいやん? (そこでカバレッジやコードの質(Code Climate)にこだわりすぎると元も子もないが….)
と,いうことでぼくはshoulda-matchersで最小限だけのテストは書くようにしてます.