Blog index

RSpec custom matcher `have_constant`

Dibuat pada:

Suppose kita ingin memeriksa apakah suatu constant ada atau tidak ada di dalam sebuah class. Kita bisa saja memeriksa nya dengan:

RSpec.describe MyClass do
  describe 'MY_CONSTANT' do
    it { expect(described_class::MY_CONSTANT).not_to be_nill  }
  end
end

Tetapi kita bisa saja melakukannya dengan cara:

RSpec.describe MyClass do
  describe 'MY_CONSTANT' do
    it { is_expected.to have_constant(:MY_CONSTANT) }
  end
end

Dengan memakai matcher have_constant kode test jadi lebih mudah dibaca. Sayangnya baik rails maupun rspec tidak memiliki matcher have_constant. Tetapi, kita bisa membuatnya dengan:

# spec/supports/have_constant

RSpec::Matchers.define :have_constant do |const|
  match do |owner|
    owner.const_defined?(const)
  end
end

Setelah itu, kita hanya perlu require custom matcher di rails_helper.