RSpec is Fun
I've been using RSpec with my latest project, and it's a welcome change from the traditional Test::Unit for Ruby.
RSpec is a more natural way to write tests for your software. It seems to be much easier to compose tests, and anything that makes testing easier is OK in my book.
A specific example of why I'm falling for RSpec:
You can easily group common tests together, and include this grouping in your main tests. Of course you can do this in any number of ways with Test::Unit, but RSpec makes it so clean and obvious.
Here's an example of a very common set of tests that I need to run again all my controllers:
In each of my controller tests, I only need to include:
Take a look at that! Reads just like English, I would say.
If you haven't made the jump to RSpec, I'd seriously recommend you give it a shot. You don't need to abandon all of you existing unit tests. Both sets of tests will run just fine in your Rails project.
RSpec is a more natural way to write tests for your software. It seems to be much easier to compose tests, and anything that makes testing easier is OK in my book.
A specific example of why I'm falling for RSpec:
You can easily group common tests together, and include this grouping in your main tests. Of course you can do this in any number of ways with Test::Unit, but RSpec makes it so clean and obvious.
Here's an example of a very common set of tests that I need to run again all my controllers:
describe "Requires Authorization", :shared => true do
describe "when not logged in" do
describe "when accessing index page" do
it "should redirect to login page" do
get 'index'
response.should redirect_to(new_session_path)
end
end
describe "when accessing new database page" do
it "should redirect to login page" do
get 'new'
response.should redirect_to(new_session_path)
end
end
describe "when accessing show database page" do
it "should redirect to login page" do
get 'show'
response.should redirect_to(new_session_path)
end
end
describe "when accessing destroy database page" do
it "should redirect to login page" do
get 'destroy'
response.should redirect_to(new_session_path)
end
end
end
end
In each of my controller tests, I only need to include:
describe DatabasesController do
it_should_behave_like "Requires Authorization"
Take a look at that! Reads just like English, I would say.
If you haven't made the jump to RSpec, I'd seriously recommend you give it a shot. You don't need to abandon all of you existing unit tests. Both sets of tests will run just fine in your Rails project.