QKAKE::TECH

テックなことを書く

RSpec での validation のテストで create せずに build した話

RSpec で Validation のテストをするときなど、わざわざ create -> update せずに build してそれが valid かどうか検証する。 FactoryGirl を用いている。

    let(:user) { create(:user) }
    let(:item) { create(:item, user: user) }

    context '金額が期待している値のとき' do
      before do
        item.price = 2000
        item.save
      end

      it do
        expect(item).to be_valid
      end
    end

のように create して update しなくても

    let(:user) { create(:user) }
    let(:item) { build(:item, user: user, price: price) }

    context '金額が期待している値のとき' do
      let(:price) { 2000 }

      it do
        expect(item).to be_valid
      end
    end

で検証するのでよさそう。

追記

accept_values_for を用いたほうがシュッとかけるかも。

参考: FactoryGirl: build と createの違い - tkymtk's blog http://tkymtk.hatenablog.com/entry/2013/12/15/214420