diff --git a/lib/rspec/core/subject.rb b/lib/rspec/core/subject.rb index 0dbdbcb9fc..81a057bb46 100644 --- a/lib/rspec/core/subject.rb +++ b/lib/rspec/core/subject.rb @@ -193,8 +193,12 @@ def its(attribute, &block) # @see ExampleMethods#subject # @see ExampleMethods#should def subject(name=nil, &block) - define_method(name) { subject } if name - block ? @explicit_subject_block = block : explicit_subject || implicit_subject + if name + let(name, &block) + subject { send name } + else + block ? @explicit_subject_block = block : explicit_subject || implicit_subject + end end attr_reader :explicit_subject_block diff --git a/spec/rspec/core/subject_spec.rb b/spec/rspec/core/subject_spec.rb index 140d67df6b..1c4a8bf9d0 100644 --- a/spec/rspec/core/subject_spec.rb +++ b/spec/rspec/core/subject_spec.rb @@ -91,6 +91,17 @@ module RSpec::Core end group.run.should be_true end + + it "is referred from inside subject by the name" do + group = ExampleGroup.describe do + subject(:list) { [1,2,3] } + describe 'first' do + subject(:first_element) { list.first } + it { should eq(1) } + end + end + group.run.should be_true + end end end