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 -- 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/9e14c1c5-4c48-4ccf-bf83-2e5e90c6aaa8%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
