Module: Shoulda::ActionController::Macros
- Includes:
- Matchers
- Included in:
- Test::Unit::TestCase
- Defined in:
- lib/shoulda/action_controller/macros.rb
Overview
Macro test helpers for your controllers
By using the macro helpers you can quickly and easily create concise and easy to read test suites.
This code segment:
context "on GET to :show for first record" do
setup do
get :show, :id => 1
end
should_assign_to :user
should_respond_with :success
should_render_template :show
should_not_set_the_flash
should "do something else really cool" do
assert_equal 1, assigns(:user).id
end
end
Would produce 5 tests for the show
action
Instance Method Summary collapse
-
#should_assign_to(*names, &block) ⇒ Object
Macro that creates a test asserting that the controller assigned to each of the named instance variable(s).
-
#should_filter_params(*keys) ⇒ Object
Macro that creates a test asserting that filter_parameter_logging is set for the specified keys.
-
#should_not_assign_to(*names) ⇒ Object
Macro that creates a test asserting that the controller did not assign to any of the named instance variable(s).
-
#should_not_set_the_flash ⇒ Object
Macro that creates a test asserting that the flash is empty.
-
#should_redirect_to(description, &block) ⇒ Object
Macro that creates a test asserting that the controller returned a redirect to the given path.
-
#should_render_template(template) ⇒ Object
Macro that creates a test asserting that the controller rendered the given template.
-
#should_render_with_layout(expected_layout = 'application') ⇒ Object
Macro that creates a test asserting that the controller rendered with the given layout.
-
#should_render_without_layout ⇒ Object
Macro that creates a test asserting that the controller rendered without a layout.
-
#should_respond_with(response) ⇒ Object
Macro that creates a test asserting that the controller responded with a ‘response’ status code.
-
#should_respond_with_content_type(content_type) ⇒ Object
Macro that creates a test asserting that the response content type was ‘content_type’.
-
#should_route(method, path, options) ⇒ Object
Macro that creates a routing test.
-
#should_set_session(key, &block) ⇒ Object
Macro that creates a test asserting that a value returned from the session is correct.
-
#should_set_the_flash_to(val) ⇒ Object
Macro that creates a test asserting that the flash contains the given value.
Methods included from Matchers
#assign_to, #filter_param, #render_with_layout, #respond_with, #respond_with_content_type, #route, #set_session, #set_the_flash
Instance Method Details
#should_assign_to(*names, &block) ⇒ Object
Macro that creates a test asserting that the controller assigned to each of the named instance variable(s).
Options:
-
:class
- The expected class of the instance variable being checked.
If a block is passed, the assigned variable is expected to be equal to the return value of that block.
Example:
should_assign_to :user, :posts
should_assign_to :user, :class => User
should_assign_to(:user) { @user }
87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/shoulda/action_controller/macros.rb', line 87 def should_assign_to(*names, &block) klass = (names, :class) names.each do |name| matcher = assign_to(name).with_kind_of(klass) should matcher.description do if block expected_value = instance_eval(&block) matcher = matcher.with(expected_value) end assert_accepts matcher, @controller end end end |
#should_filter_params(*keys) ⇒ Object
Macro that creates a test asserting that filter_parameter_logging is set for the specified keys
Example:
should_filter_params :password, :ssn
64 65 66 67 68 69 70 71 |
# File 'lib/shoulda/action_controller/macros.rb', line 64 def should_filter_params(*keys) keys.each do |key| matcher = filter_param(key) should matcher.description do assert_accepts matcher, @controller end end end |
#should_not_assign_to(*names) ⇒ Object
Macro that creates a test asserting that the controller did not assign to any of the named instance variable(s).
Example:
should_not_assign_to :user, :posts
108 109 110 111 112 113 114 115 |
# File 'lib/shoulda/action_controller/macros.rb', line 108 def should_not_assign_to(*names) names.each do |name| matcher = assign_to(name) should "not #{matcher.description}" do assert_rejects matcher, @controller end end end |
#should_not_set_the_flash ⇒ Object
Macro that creates a test asserting that the flash is empty.
51 52 53 54 55 56 |
# File 'lib/shoulda/action_controller/macros.rb', line 51 def should_not_set_the_flash matcher = set_the_flash should "not #{matcher.description}" do assert_rejects matcher, @controller end end |
#should_redirect_to(description, &block) ⇒ Object
Macro that creates a test asserting that the controller returned a redirect to the given path. The passed description will be used when generating a test name. Expects a block that returns the expected path for the redirect.
Example:
should_redirect_to("the user's profile") { user_url(@user) }
199 200 201 202 203 204 |
# File 'lib/shoulda/action_controller/macros.rb', line 199 def should_redirect_to(description, &block) should "redirect to #{description}" do expected_url = instance_eval(&block) assert_redirected_to expected_url end end |
#should_render_template(template) ⇒ Object
Macro that creates a test asserting that the controller rendered the given template. Example:
should_render_template :new
162 163 164 165 166 |
# File 'lib/shoulda/action_controller/macros.rb', line 162 def should_render_template(template) should "render template #{template.inspect}" do assert_template template.to_s end end |
#should_render_with_layout(expected_layout = 'application') ⇒ Object
Macro that creates a test asserting that the controller rendered with the given layout. Example:
should_render_with_layout 'special'
172 173 174 175 176 177 178 179 180 181 182 183 |
# File 'lib/shoulda/action_controller/macros.rb', line 172 def should_render_with_layout(expected_layout = 'application') matcher = render_with_layout(expected_layout) if expected_layout should matcher.description do assert_accepts matcher, @controller end else should "render without layout" do assert_rejects matcher, @controller end end end |
#should_render_without_layout ⇒ Object
Macro that creates a test asserting that the controller rendered without a layout. Same as @should_render_with_layout false@
187 188 189 |
# File 'lib/shoulda/action_controller/macros.rb', line 187 def should_render_without_layout should_render_with_layout nil end |
#should_respond_with(response) ⇒ Object
Macro that creates a test asserting that the controller responded with a ‘response’ status code. Example:
should_respond_with :success
121 122 123 124 125 126 |
# File 'lib/shoulda/action_controller/macros.rb', line 121 def should_respond_with(response) should "respond with #{response}" do matcher = respond_with(response) assert_accepts matcher, @controller end end |
#should_respond_with_content_type(content_type) ⇒ Object
Macro that creates a test asserting that the response content type was ‘content_type’. Example:
should_respond_with_content_type 'application/rss+xml'
should_respond_with_content_type :rss
should_respond_with_content_type /rss/
134 135 136 137 138 139 |
# File 'lib/shoulda/action_controller/macros.rb', line 134 def should_respond_with_content_type(content_type) matcher = respond_with_content_type(content_type) should matcher.description do assert_accepts matcher, @controller end end |
#should_route(method, path, options) ⇒ Object
Macro that creates a routing test. It tries to use the given HTTP method
on the given path
, and asserts that it routes to the given options
.
If you don’t specify a :controller, it will try to guess the controller based on the current test.
to_param
is called on the options
given.
Examples:
should_route :get, "/posts", :controller => :posts, :action => :index
should_route :get, "/posts/new", :action => :new
should_route :post, "/posts", :action => :create
should_route :get, "/posts/1", :action => :show, :id => 1
should_route :edit, "/posts/1", :action => :show, :id => 1
should_route :put, "/posts/1", :action => :update, :id => 1
should_route :delete, "/posts/1", :action => :destroy, :id => 1
should_route :get, "/users/1/posts/1",
:action => :show, :id => 1, :user_id => 1
227 228 229 230 231 232 233 234 235 236 237 |
# File 'lib/shoulda/action_controller/macros.rb', line 227 def should_route(method, path, ) unless [:controller] [:controller] = self.name.gsub(/ControllerTest$/, '').tableize end matcher = route(method, path).to() should matcher.description do assert_accepts matcher.in_context(self), self end end |
#should_set_session(key, &block) ⇒ Object
Macro that creates a test asserting that a value returned from the session is correct. Expects the session key as a parameter, and a block that returns the expected value.
Example:
should_set_session(:user_id) { @user.id }
should_set_session(:message) { "Free stuff" }
149 150 151 152 153 154 155 156 |
# File 'lib/shoulda/action_controller/macros.rb', line 149 def should_set_session(key, &block) matcher = set_session(key) should matcher.description do expected_value = instance_eval(&block) matcher = matcher.to(expected_value) assert_accepts matcher, @controller end end |
#should_set_the_flash_to(val) ⇒ Object
Macro that creates a test asserting that the flash contains the given value. Expects a String
or Regexp
.
If the argument is nil
, it will assert that the flash is not set. This behavior is deprecated.
Example:
should_set_the_flash_to "Thank you for placing this order."
should_set_the_flash_to /created/i
37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/shoulda/action_controller/macros.rb', line 37 def should_set_the_flash_to(val) if val matcher = set_the_flash.to(val) should matcher.description do assert_accepts matcher, @controller end else warn "[DEPRECATION] should_set_the_flash_to nil is deprecated. " << "Use should_not_set_the_flash instead." should_not_set_the_flash end end |