I've had my problems with shoulda, but one very powerful component of the testing framework is the ability to create macros. Here's one that checks to make sure a user has to be logged in to access an action. Put it into test/shoulda_macros/authentication.rb. (You can name the file anything you want I just thought authentication.rb made sense)
Test::Unit::TestCase.class_eval do def self.should_require_login(*actions) actions.each do |action| should "Require login for '#{action}' action" do get(action) assert_redirected_to(login_url) end end end end </ruby> Then inside your controller test do something like this: <pre lang="ruby"> class UserControllerTest < ActionController::TestCase should_require_login :edit, :update, :destroy end
Tags: Ruby On Rails · shoulda · testing6 Comments












6 responses so far ↓
Nice! I was actually in the middle of writing a should_have_before_filters macro when I found this post. Very helpful.
Hi Justin, i think this macro don’t work fine under the hood because update and destroy don’t user the GET verb, i think that the parameter should be a hash with action and verb, what do you think?
Regards.
That is a good point. Those actions should require the appropriate ver – POST, PUT and DELETE. I don’t know that I want to pass a hash to the macro but perhaps that is the only correct way. I’m open to ideas and modifications if you have them.
Here is an idea: http://gist.github.com/45709
Regards.
[...] Using Shoulda to test login – Justin Ball, has been looking into using Shoulda to test authentication. [...]
[...] Usando o Shoulda para testar login – Justin Ball tem pesquisado a utilização do Shoulda para testar autenticação. [...]