Rspec subjectの使い方

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のときに評価されます。

 

 

 

 

label,

書いた人

銀座の事業会社でエンジニアをやっております。 まだまだぺーぺーです。

One Comment

  1. creature 2018年8月10日 Reply

コメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です