2017-08-30 2 views
0

RSpecで現在のスコープのサブジェクトを定義するときに、親スコープのサブジェクトにアクセスするにはどうしたらいいですか?RSpecの親スコープサブジェクトにアクセスしますか?

コード例:上記のコメントから@mudasobwaする

describe MyModule.method(:some_method) do 

    context "when called with a String" do 
    let(:string) { "Hey there!" } 

    # I want to refine the subject using the parent scope's subject - common case 
    # is applying a subject method. Something like: 
    subject { super.subject.call string } 

    # Use subject... 

    end # when called with a String 

end # MyModule.some_method 
+0

あなたはほぼあります '対象は{スーパー()}' okです。 – mudasobwa

+0

@mudasobwa本当に?私は戻ってもう一度やり直すつもりですが、私はそこに 'super()'と同じでなければなりません)と 'super.call'を持っていると誓っています... – nrser

+0

@mudasobwa huh、 super()。call 'works(' super.call'はそうではありません)... ...私は完全に 'super'を理解していないと思います。とにかく、ありがとう! – nrser

答えて

0

OK、クレジット、ここでのソリューションです:

あなたが明示的に引数なしsuper()を呼び出す必要があります - だけでsuperはしませんなぜならRubyの暗黙の引数渡しを試みて失敗するからです。

正しい例:あなたはあなたの件名に名前を付けることができ

describe MyModule.method(:some_method) do 

    context "when called with a String" do 
    let(:string) { "Hey there!" } 

    # Note the explicit `()`: 
    subject { super().call string } 

    # Use subject... 

    end # when called with a String 

end # MyModule.some_method 
0

context do 
    subject(:my_thing) { described_class.new } 

    context '#do_stuff' 
    subject { my_thing.do_stuff } 

    it { expect(subject).to ... } # or 
    it { is_expected.to ... } 
    end 
end 
+0

[Docs](https://relishapp.com/rspec/rspec-core/v/3-6/docs/metadata/described-class)は、記述されたクラスが最も外側の主題がクラスこの場合は方法です)。とにかく、私は、 'subject'を使って、パラメータを渡すことなく共有の例を簡単にしたいと思っていたと思います。 – nrser

関連する問題