n350071のブログ

主にRubyなフリーランスエンジニア

RSpecのshared_exampleでテストを共有する

2019-08-24 n350071RSpec

🤩 itshouldbehave_likeで共有する(変数がないパターン)

describe 'how_are_you?' do
  shared_examples_for "happy" do
    it{expect(dog.feel_good?).to be true}
  end

  context 'good status' do
    it_should_behave_like("happy"){let(:dog){FactoryGirl.create :dog, status: :eating}}
    it_should_behave_like("happy"){let(:dog){FactoryGirl.create :dog, status: :excited}}
    it_should_behave_like("happy"){let(:dog){FactoryGirl.create :dog, status: :running}}
  end
end

🤩 itshouldbehave_likeで共有する(変数があるパターン)

shared_examples_for "0-23 hour" do |expectation|
  it{expect(hour.save).to be expectation}
end
describe 'hours' do
  it_should_behave_like("0-23 hour", false){let(:hour){FactoryGirl.create :hour, hour: -1}}
  it_should_behave_like("0-23 hour", true) {let(:hour){FactoryGirl.create :hour, hour: 0}}
  it_should_behave_like("0-23 hour", true) {let(:hour){FactoryGirl.create :hour, hour: 1}}
  it_should_behave_like("0-23 hour", true) {let(:hour){FactoryGirl.create :hour, hour: 22}}
  it_should_behave_like("0-23 hour", true) {let(:hour){FactoryGirl.create :hour, hour: 23}}
  it_should_behave_like("0-23 hour", false){let(:hour){FactoryGirl.create :hour, hour: 24}}
  it_should_behave_like("0-23 hour", false){let(:hour){FactoryGirl.create :hour, hour: 25}}
end

参考