Jeff Nyman
2011-Sep-28 12:30 UTC
[rspec-users] Custom Formatter: Getting Text from It Method
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
David Chelimsky
2011-Sep-30 20:35 UTC
[rspec-users] Custom Formatter: Getting Text from It Method
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. > > - JeffThe 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
Alex Chaffee
2011-Oct-01 02:17 UTC
[rspec-users] Custom Formatter: Getting Text from It Method
> The reason I''m doing this is because I''dlike 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. Have you seen Wrong? You just described its intent :-) http://github.com/sconover/wrong If you get a source code block you can use the Chunk class in Wrong to parse it and pull out useful snippets. But you probably won''t have access to the binding and its values at that point. hth - A On Sep 28, 2011, at 5:30 AM, Jeff Nyman <jeffnyman at gmail.com> 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 > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20110930/9c3b36f7/attachment.html>