Hindari duplikasi saat menguji atribut model di RSpec

Saya memiliki beberapa model dan dalam model ini saya memiliki atribut yang tidak ingin saya blank/kosongkan.

Saya ingin menguji model saya pada batasan ini menggunakan RSpec dan Factory Girl.

Namun saya berakhir dengan duplikasi kode:

spesifikasi_pengguna:

it 'is invalid if blank' do
  expect {
   FactoryGirl.create(:user, nickname => '')
  }.to raise_error(ActiveRecord::RecordInvalid)
end

spesifikasi_pesan:

it 'is invalid if blank' do
  expect {
   FactoryGirl.create(:message, :re => '')
  }.to raise_error(ActiveRecord::RecordInvalid)
end

Bagaimana saya bisa memfaktorkannya?


person Valentin Trinqué    schedule 08.12.2015    source sumber


Jawaban (1)


RSpec menyediakan beberapa cara untuk melakukannya, seperti Contoh Bersama.

1. Buat file di [RAILS_APP_ROOT]/support/ Anda

Berdasarkan contoh Anda, Anda dapat memberi nama file ini not_blank_attribute.rb. Kemudian, Anda hanya perlu memindahkan kode duplikat dan mengadaptasinya agar dapat dikonfigurasi:

RSpec.shared_examples 'a mandatory attribute' do |model, attribute|
  it 'should not be empty' do
    expect {
      FactoryGirl.create(model, attribute => '')
    }.to raise_error(ActiveRecord::RecordInvalid)
  end
end

2. Gunakan fungsi it_behaves_like dalam spesifikasi Anda

Fungsi ini akan memanggil contoh yang dibagikan.

RSpec.describe User, '#nickname' do
  it_behaves_like 'a mandatory attribute', :User, :nickname
end

Akhirnya, ini menghasilkan:

User#nickname
  behaves like a mandatory attribute
      should not be empty
person Valentin Trinqué    schedule 08.12.2015