1日1gemとは
最近好きなgemってありますか? という質問に自分が答えられるように始めたgemを紹介する記事
rspec/rspec-its
https://github.com/rspec/rspec-its
何をするの?
rspec3 で core から無くなった、 its
を復活させる gem
- 正確には、
its
が別gemに分離した
サンプル
require_relative '../lib/hoge' RSpec.describe Hoge do let(:message){ 'hello' } subject { Hoge.new(message) } # こんな風に書き換えられる #it { expect(subject.message).to eq(message) } its(:message) { is_expected.to eq(message) } # ネストできる its('say.hello') { is_expected.to eq('hello') } describe '#saids' do before do @hoge = Hoge.new(message) @hoge.say.hello @hoge.say.hoo end subject { @hoge } # 複数型なら `are_expected` its('saids') { are_expected.to eq(%w[hello hoo]) } describe 'array' do subject { @hoge.saids } # 配列の要素指定 its([1]) { is_expected.to eq('hoo') } end end end
そもそもなんで its
が core から無くなったの?
ここに、rspec の中の人のコメントがある
Explanation for why `its` will be removed from rspec-3 · GitHub
要約すると、 its
を使った場合に、rspecの出力結果が直感的でなくなって、デバッグに支障がでると思うので辞めたとのこと
ただ、個人的にはあんまり納得いってない
- コメントにある
it { expect(subject.name).to eq "Bob" }
みたいに書いた場合、its
と変わんないのに、ただコードが長くなるだけでないの? という疑問への回答が無い - 悪い例が書かれているけど、良い例が無いので、「じゃあどうするのが理想なの?」への回答が無い
- そもそも、rspec って、テストコードを英文と一致させることを諦めてなかったっけ?