RSpec is an awesome testing framework. On top of being the first Ruby BDD framework the core team is doing a great job in enhancing our testing experience and therefore the quality of our code.
This time, I don’t want to introduce to the latest changes but instead showing you what Josh Knowles, Bryan Helmkamp and myself came up with.
RSpec on Rails matchers plugin + TextMate Bundle
Matchers are some sort of helpers that will help you cleaning up your tests. We simply came up with a collection of matchers that we think will make your like easier.
We divided the matchers in 3 categories:
Associations
Verify that the association has been defined. (doesn’t verify that the association works!)
Usage examples:
1 2 3 4 5 6 7 8 |
@post.should have_many(:comments)
@comment.should belong_to(:post)
@user.should have_one(:social_security_number)
@project.should have_and_belong_to_many(:categories)
|
Validations
Verify that a validation has been defined. (doesn’t test the validation itself)
1 2 3 4 5 6 7 8 9 10 |
object.should validate_presence_of(:attribute)
object.should validate_confirmation_of(:attribute)
object.should validate_uniqueness_of(:attribute)
object.should validate_length_of(:attribute, :between => 5..10)
object.should validate_length_of(:attribute, :is => 5)
|
Views
My personal favorite matchers, you can now do stuff like:
1 2 3 4 5 6 7 8 9 10 11 12 |
it "should render new form" do
render "/users/new.html.erb"
response.should have_form_posting_to(users_path) do
with_text_field_for(:user_name)
with_text_area_for(:user_address)
with_text_field_for(:user_login)
with_text_field_for(:user_email)
with_submit_button
end
end
|
Check the readme for more information and details on the added matchers. I personally recommend you try the TextMate Bundle on top of being a perfect tool for lazy devs, it also lists all the available matchers and is an excellent way of learning.
We just released our first release yesterday, this is not a final version and we will keep on improving the code. If you have suggestions and patches feel free to open a ticket there.
Comments