On Sep 28, 2011, at 7:30 AM, Jeff Nyman wrote:

> Hey all.
> 
> I've been playing around with RSpec custom formatters to see how much
> flexibility there is. One thing I've been trying to see is if I can
> print the contents of a variable that's in an example (it) method. So,
> for example, here's what I have in my specification:
> 
>  it "should display results range" do
>    search_for("star wars")
>    @browser.text.should match(/Showing .* of .* Results/)
>    intent = "Text 'Showing .* of .* Results' shows after 'Star Wars'
> search"
>  end
> 
> Notice the line with intent there? I realize this is not what most
> people would do with RSpec. The reason I'm doing this is because I'd
> like viewers of the test results to see the exact condition that was
> tested for in the should if they want to -- without having to read the
> code. Again, I'm just experimenting.
> 
> What I'm trying to do is figure out how I could use a custom formatter
> to print out that intent text. I know that the example_passed method
> in the formatters contains elements like example.description that
> prints out the text of the it method. But trying @output.puts
> example.intent does not seem to work.
> 
> Is there a better way to do what I'm trying to do here? Again, I
> realize that most people are happy with the describe and it text being
> printed out. But sometimes people -- like my business users -- want to
> check the actual condition that was checked for, without having to
> read Ruby code.
> 
> Any pointers or tips would be greatly appreciated.
> 
> - Jeff

The variables defined inside the example are out of scope in the formatter. You 
can do something like this:

==================
require 'rspec/core/formatters/base_text_formatter'

module ExtraDoc
  def example_passed(example)
    example.description << ": #{example.metadata[:extra_doc]}"
  end
end

RSpec::Core::Formatters::BaseTextFormatter.send(:include, ExtraDoc)

describe "something" do
  it "does something", :extra_doc => "with extra sauce" do
  end
end
==================

Output from `rspec --format documentation` is:

==================
something
  does something: with extra sauce
==================

That said, I'd focus on naming the examples better so they serve the needs of 
all readers.

HTH,
David
_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to