Want to open a PR fixing our README :)? On Tue, Mar 3, 2015 at 11:04 AM, <[email protected]> wrote:
> > > On Saturday, February 28, 2015 at 3:00:07 PM UTC-5, Myron Marston wrote: >> >> >> >> On Saturday, February 28, 2015 at 11:57:30 AM UTC-8, Myron Marston wrote: >>> >>> On Saturday, February 28, 2015 at 11:48:01 AM UTC-8, >>> [email protected] wrote: >>>> >>>> Consider this (simplified) snippet. RSpec 3.1.7 >>>> >>>> RSpec.describe MyController, :type => :controller do >>>> >>>> describe "PUT #update" do >>>> >>>> before(:example) do >>>> puts self.class #=> >>>> RSpec::ExampleGroups::MyController::PUTUpdate >>>> puts self.class.example.description #=> "example at >>>> ./spec/controllers/my_controller_spec.rb:xxx" >>>> puts self.class.example.full_description #=> "MyController PUT >>>> update" >>>> puts example.description #=> undefined local >>>> variable or method 'example' >>>> >>>> end >>>> >>>> >>>> it "should update things" do >>>> puts self.class #=> >>>> RSpec::ExampleGroups::MyController::PUTUpdate >>>> puts self.class.example.description #=> "example at >>>> ./spec/controllers/my_controller_spec.rb:xxx" >>>> puts self.class.example.full_description #=> "MyController PUT >>>> update" >>>> puts example.description #=> undefined local >>>> variable or method 'example' >>>> end >>>> end >>>> end >>>> >>>> >>>> I'm seeing some odd results when getting the metadata and description >>>> values for examples. >>>> >>>> None of the Example instance methods work. Everything behaves as an >>>> ExampleGroup. I'm not sure if this is intended. >>>> >>>> From the rspec-core README https://github.com/rspec/rspec-core#metadata >>>> >>>> >>>> it "does something" do >>>> expect(example.metadata[:description]).to eq("does something") >>>> end >>>> >>>> This does not work. Am I doing something wrong? >>>> >>> >>> Our README is out of date -- it was written against RSpec 2 but we have >>> no tooling that validates its correctness and we forgot to update that >>> example for the changes in RSpec 3. That's one advantage of the cukes -- >>> they are self-validating and thus always correct :). >>> >>> Anyhow, in RSpec 3, we removed the `example` method, in favor of passing >>> an arg to the `it`, `before`, `after`, `let`, etc. blocks: >>> >>> http://rspec.info/blog/2014/05/notable-changes-in-rspec-3/ >>> #dsl-methods-yield-the-example-as-an-argument >>> >>> So change `before(:example) do` to `before(:example) do |example|` and >>> `it "..." do` to `it "..." do |example|` and it should work. >>> >>> Everything behaves as an ExampleGroup. I'm not sure if this is intended. >>> >>> >>> It is. Every example is evaluated in the context of an instance of the >>> example group class of which it is a part. This mirrors typical xUnit >>> structure where you've got TestCase classes and tests are instance methods >>> of those classes. This in turn provides us with the desired scoping and >>> inheritance semantics that you'd want. Helper methods defined in the >>> example group can be automatically called from within the `it` block >>> without doing anything special to support that. >>> >>> The `example` object yielded to these methods is a special object that >>> keeps track of the state of a particular example, exposing its metadata, >>> its execution result, etc. >>> >>> HTH, >>> Myron >>> >> >> One other thing that's probably confusing there: when you call >> `self.class.example` you are defining a new example. `it` is simply an >> alias of `example`. That's why `self.class.example.description` has the >> location rather than the description of the `it` example -- because you're >> getting the description off of a new, anonymous example, so it is using the >> location description as the example description. >> >> Myron >> > > Got it. Works as expected. Thanks! > > -- > You received this message because you are subscribed to the Google Groups > "rspec" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/rspec/5fd08772-9a0d-4855-870f-d0aa9e66fd46%40googlegroups.com > <https://groups.google.com/d/msgid/rspec/5fd08772-9a0d-4855-870f-d0aa9e66fd46%40googlegroups.com?utm_medium=email&utm_source=footer> > . > > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "rspec" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/rspec/CADUxQmvb6gOthJvcfL7uEnJKd2e5g59cVDFV5po712Nzdu4Odg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
