2007-01-22 14:43:50 +01:00
|
|
|
require 'test/unit/assertions'
|
|
|
|
|
2007-02-09 09:04:31 +01:00
|
|
|
module ActionController #:nodoc:
|
|
|
|
# In addition to these specific assertions, you also have easy access to various collections that the regular test/unit assertions
|
|
|
|
# can be used against. These collections are:
|
|
|
|
#
|
|
|
|
# * assigns: Instance variables assigned in the action that are available for the view.
|
|
|
|
# * session: Objects being saved in the session.
|
|
|
|
# * flash: The flash objects currently in the session.
|
|
|
|
# * cookies: Cookies being sent to the user on this request.
|
2007-12-21 08:48:59 +01:00
|
|
|
#
|
2007-02-09 09:04:31 +01:00
|
|
|
# These collections can be used just like any other hash:
|
|
|
|
#
|
|
|
|
# assert_not_nil assigns(:person) # makes sure that a @person instance variable was set
|
|
|
|
# assert_equal "Dave", cookies[:name] # makes sure that a cookie called :name was set as "Dave"
|
|
|
|
# assert flash.empty? # makes sure that there's nothing in the flash
|
|
|
|
#
|
|
|
|
# For historic reasons, the assigns hash uses string-based keys. So assigns[:person] won't work, but assigns["person"] will. To
|
2007-12-21 08:48:59 +01:00
|
|
|
# appease our yearning for symbols, though, an alternative accessor has been devised using a method call instead of index referencing.
|
2007-02-09 09:04:31 +01:00
|
|
|
# So assigns(:person) will work just like assigns["person"], but again, assigns[:person] will not work.
|
|
|
|
#
|
|
|
|
# On top of the collections, you have the complete url that a given action redirected to available in redirect_to_url.
|
|
|
|
#
|
|
|
|
# For redirects within the same controller, you can even call follow_redirect and the redirect will be followed, triggering another
|
|
|
|
# action call which can then be asserted against.
|
|
|
|
#
|
|
|
|
# == Manipulating the request collections
|
|
|
|
#
|
|
|
|
# The collections described above link to the response, so you can test if what the actions were expected to do happened. But
|
|
|
|
# sometimes you also want to manipulate these collections in the incoming request. This is really only relevant for sessions
|
|
|
|
# and cookies, though. For sessions, you just do:
|
|
|
|
#
|
|
|
|
# @request.session[:key] = "value"
|
|
|
|
#
|
|
|
|
# For cookies, you need to manually create the cookie, like this:
|
|
|
|
#
|
|
|
|
# @request.cookies["key"] = CGI::Cookie.new("key", "value")
|
|
|
|
#
|
|
|
|
# == Testing named routes
|
|
|
|
#
|
2007-12-21 08:48:59 +01:00
|
|
|
# If you're using named routes, they can be easily tested using the original named routes' methods straight in the test case.
|
|
|
|
# Example:
|
2007-02-09 09:04:31 +01:00
|
|
|
#
|
|
|
|
# assert_redirected_to page_url(:title => 'foo')
|
|
|
|
module Assertions
|
|
|
|
def self.included(klass)
|
2007-12-21 08:48:59 +01:00
|
|
|
%w(response selector tag dom routing model).each do |kind|
|
|
|
|
require "action_controller/assertions/#{kind}_assertions"
|
|
|
|
klass.module_eval { include const_get("#{kind.camelize}Assertions") }
|
2007-01-22 14:43:50 +01:00
|
|
|
end
|
2007-02-09 09:04:31 +01:00
|
|
|
end
|
2007-01-22 14:43:50 +01:00
|
|
|
|
2007-02-09 09:04:31 +01:00
|
|
|
def clean_backtrace(&block)
|
|
|
|
yield
|
2007-12-21 08:48:59 +01:00
|
|
|
rescue Test::Unit::AssertionFailedError => error
|
|
|
|
framework_path = Regexp.new(File.expand_path("#{File.dirname(__FILE__)}/assertions"))
|
|
|
|
error.backtrace.reject! { |line| File.expand_path(line) =~ framework_path }
|
|
|
|
raise
|
2007-02-09 09:04:31 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
2007-01-22 14:43:50 +01:00
|
|
|
|
2007-02-09 09:04:31 +01:00
|
|
|
module Test #:nodoc:
|
|
|
|
module Unit #:nodoc:
|
|
|
|
class TestCase #:nodoc:
|
|
|
|
include ActionController::Assertions
|
2007-01-22 14:43:50 +01:00
|
|
|
end
|
|
|
|
end
|
2007-12-21 08:48:59 +01:00
|
|
|
end
|