rspecを書いていてsubjectというものを使ったのでメモします。
使ったことない〜〜とか、それを使っているコードをみて何をしているか知りたい人向けに具体例と一緒に書いていこうと思っています。
詳しいことはよくわからないのでこう書いたらこう動くんだなーという感じで見ていってください。
subjectとは
ようはletメソッドのようなものらしいです。letと同じように遅延評価をしてくれます。共通の処理はsubectに書いて遅延で呼び出しDRYにかける。
letメソッドについてはこちら
使い方
使い方というより書き方。
subject { 共通の処理 }
名前もつけられます
subject(:名前) { 共通の処理 }
こんな感じで書きます
さらにsubjectを使用すると「is_expected」を使って期待する値を書くことができます。
この「is_expected」は下記の様になっているそうです。
def is_expected expect(subject) end
どういうときに使うの?
私はモデルのバリデーションをテストするときに使いました。
モデルのバリデーションをするときに、作成したモデルインスタンスに対して毎回「valid?」メソッドを使用すると思います。
これをsubjectに書き出しました。
具体例
RSpec.describe Book, type: :model do let(:title) { "サンプル" } let(:book) { Book.new(title: title) } describe '#valid?' do subject { book.valid? } context 'with title' do it 'is be valid' do is_expected.to be_truthy end end context 'without title' do let(:title) { nil } it 'is invalid' do is_expected.to be_falsey end end end end
subjectはis_expectedのときに評価されます。
vue.jsの記事もお願いします