Eugene
Eugene

Reputation: 4879

Include Rspec examples with variable

I have a few sets of rspecs that all include some shared examples. I would like those shared examples to then include other shared examples, if the original spec had some variable set. Basically this is what I'm trying to do.

Example:

File: spec/test_spec.rb

describe 'some thing' do
  let(:some_feature) { true }

  describe 'some tests' do
    include_examples "shared_tests" 
  end
end

File spec/shared/shared_tests.rb

shared_examples_for "shared_tests" do
  include_examples "feature_specific_tests" if some_feature
end

As expected, this is throwing an error like this:

undefined local variable or method `some_feature`

Is there a way to do this? I thought perhaps I could define @some_feature in a before(:all) block and then use if @some_feature in the shared_examples, but that is always nil.

Upvotes: 4

Views: 2472

Answers (1)

Richard Jordan
Richard Jordan

Reputation: 8202

Rewriting the answer to make it a little clearer:

You had this:

File: spec/test_spec.rb

describe 'some thing' do
  let(:some_feature) { true }

  describe 'some tests' do
    include_examples "shared_tests" 
  end
end

File spec/shared/shared_tests.rb

shared_examples_for "shared_tests" do
  include_examples "feature_specific_tests" if some_feature
end

Change it to:

File: spec/test_spec.rb

describe 'some thing' do

  describe 'some tests' do
    include_examples "shared_tests" do
      let(:some_feature) { true }
    end
  end
end

File spec/shared/shared_tests.rb

shared_examples "shared_tests" do
  if some_feature
    it_should_behave_like "feature_specific_tests"
  end

  # rest of your tests for shared example group
  # 'a logged in registered user goes here
end

And it'll all work nicely :-)

Upvotes: 3

Related Questions