Reputation: 4879
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
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