4

私は、いくつかの共有例をすべて含む rspec のセットをいくつか持っています。元の仕様に変数が設定されている場合は、これらの共有された例に他の共有された例を含めたいと思います。基本的に、これは私がやろうとしていることです。

例:

ファイル:spec/test_spec.rb

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

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

ファイルspec/shared/shared_tests.rb

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

予想どおり、これは次のようなエラーをスローしています。

undefined local variable or method `some_feature`

これを行う方法はありますか?おそらくブロックで定義@some_featureしてから で使用できると思いましたが、それは常に.before(:all)if @some_featureshared_examplesnil

4

1 に答える 1

3

少し明確にするために答えを書き直します:

あなたはこれを持っていました:

ファイル: spec/test_spec.rb

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

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

ファイル spec/shared/shared_tests.rb

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

次のように変更します。

ファイル: spec/test_spec.rb

describe 'some thing' do

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

ファイル 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

そして、それはすべてうまく機能します:-)

于 2013-03-23T02:09:15.943 に答える