I am using Ruby on Rails 3.2.2 and rspec-rails-2.8.1. I would like to output more information about tests that are going to be run, for example, this way:
# file_name.html.erb
...
# General idea
expected_value = ...
it "... #{expected_value}" do
...
end
# Usage that I am trying to implement
expected_page_title =
I18n.translate(
'page_title_html'
:user => @user.firstname
)
it "displays the #{expected_page_title} page title" do
view.content_for(:page_title).should have_content(expected_page_title)
end
Note: “Outputs” are intended to be those that are output when you run the rspec . --format documentation command line in the Terminal window.
Is it a right way to test?
Related questions:
Your question is going to solicit some opinions, but I’ll try and justify mine with some examples.
Short answer: No, this isn’t how you should be writing RSpec (or any test) descriptions. It’s unconventional and doesn’t add much value for the extra code.
Long answer: RSpec is a BDD (behavior driven development) tool that was designed to help describe the behavior and intent of your code at the same time as writing automated tests. When you think about the behavior of your code, does adding the expected result to the test description really add much value? If so, maybe you should rethink what you are testing.
For example, say you have a User class and you want to test a method that concatenates a user’s first and last name:
VS
In the first test, what does having the expected result in the description really buy you? Does it tell you anything about the expected behavior of a user? Not really.
Take your example. If I was coming along to your project and saw a test description like that, I would be confused because it doesn’t really tell me what is being tested. I would still need to look at the code to understand what is going on. Compare these two examples:
Which would give you something in the console like:
“displays the My Awesome Title page title”
Compare that to:
Which would be exactly the same in the console as it is in the test:
“should translate the page title”
Your obviously free to choose whichever one you want, but I am speaking from a few years of testing experience and highly recommend you don’t do this.