Class: Spec::Rails::Example::ViewExampleGroup
- Inherits:
-
FunctionalExampleGroup
- Object
- ActionController::TestCase
- FunctionalExampleGroup
- Spec::Rails::Example::ViewExampleGroup
- Includes:
- ActionView::Helpers
- Defined in:
- lib/spec/rails/example/view_example_group.rb
Overview
View Examples live in $RAILS_ROOT/spec/views/.
View Specs use Spec::Rails::Example::ViewExampleGroup, which provides access to views without invoking any of your controllers. See Spec::Rails::Expectations::Matchers for information about specific expectations that you can set on views.
Example
describe "login/login" do
before do
render 'login/login'
end
it "should display login form" do
response.should have_tag("form[action=/login]") do
with_tag("input[type=text][name=email]")
with_tag("input[type=password][name=password]")
with_tag("input[type=submit][value=Login]")
end
end
end
Instance Attribute Summary
Attributes inherited from FunctionalExampleGroup
Class Method Summary collapse
-
.inherited(klass) ⇒ Object
:nodoc:.
Instance Method Summary collapse
-
#add_helpers(options) ⇒ Object
:nodoc:.
-
#base_view_path(options) ⇒ Object
:nodoc:.
-
#derived_action_name(options) ⇒ Object
:nodoc:.
-
#derived_controller_name(options) ⇒ Object
:nodoc:.
-
#ensure_that_base_view_path_is_not_set_across_example_groups ⇒ Object
:nodoc:.
-
#ensure_that_flash_and_session_work_properly ⇒ Object
:nodoc:.
-
#render(*args) ⇒ Object
Renders a template for a View Spec, which then provides access to the result through the
response
. -
#set_base_view_path(options) ⇒ Object
:nodoc:.
-
#subject_of_render(options) ⇒ Object
:nodoc:.
-
#template ⇒ Object
This provides the template.
Methods inherited from FunctionalExampleGroup
#assigns, #cookies, #flash, #orig_assigns, #params, #session, #setup
Methods inherited from ActionController::TestCase
Methods included from RoutingHelpers
Class Method Details
.inherited(klass) ⇒ Object
:nodoc:
65 66 67 68 |
# File 'lib/spec/rails/example/view_example_group.rb', line 65 def inherited(klass) # :nodoc: klass.subject { template } super end |
Instance Method Details
#add_helpers(options) ⇒ Object
:nodoc:
117 118 119 120 121 122 |
# File 'lib/spec/rails/example/view_example_group.rb', line 117 def add_helpers() #:nodoc: @controller.add_helper("application") @controller.add_helper(derived_controller_name()) @controller.add_helper([:helper]) if [:helper] [:helpers].each { |helper| @controller.add_helper(helper) } if [:helpers] end |
#base_view_path(options) ⇒ Object
:nodoc:
94 95 96 |
# File 'lib/spec/rails/example/view_example_group.rb', line 94 def base_view_path() #:nodoc: "/#{derived_controller_name()}/" end |
#derived_action_name(options) ⇒ Object
:nodoc:
103 104 105 106 |
# File 'lib/spec/rails/example/view_example_group.rb', line 103 def derived_action_name() #:nodoc: parts = subject_of_render().split('/').reject { |part| part.empty? } "#{parts.last}".split('.').first end |
#derived_controller_name(options) ⇒ Object
:nodoc:
98 99 100 101 |
# File 'lib/spec/rails/example/view_example_group.rb', line 98 def derived_controller_name() #:nodoc: parts = subject_of_render().split('/').reject { |part| part.empty? } "#{parts[0..-2].join('/')}" end |
#ensure_that_base_view_path_is_not_set_across_example_groups ⇒ Object
:nodoc:
86 87 88 |
# File 'lib/spec/rails/example/view_example_group.rb', line 86 def ensure_that_base_view_path_is_not_set_across_example_groups #:nodoc: ActionView::Base.base_view_path = nil end |
#ensure_that_flash_and_session_work_properly ⇒ Object
:nodoc:
74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/spec/rails/example/view_example_group.rb', line 74 def ensure_that_flash_and_session_work_properly #:nodoc: # For some reason which I do not yet understand, when running # examples with rake on ruby-1.9.2, the @controller is not defined. @controller ||= ViewExampleGroupController.new @controller.class.__send__ :public, :flash @controller.__send__ :initialize_template_class, @response @controller.__send__ :assign_shortcuts, @request, @response @controller.__send__ :initialize_current_url @session = @controller.session end |
#render(*args) ⇒ Object
Renders a template for a View Spec, which then provides access to the result through the response
. Also supports render with :inline, which you can use to spec custom form builders, helpers, etc, in the context of a view.
Examples
render('/people/list')
render('/people/list', :helper => My)
render('/people/list', :helpers => [My, MyOther])
render(:partial => '/people/_address')
render(:inline => "<% custom_helper 'argument', 'another argument' %>")
See Spec::Rails::Example::ViewExampleGroup for more information.
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
# File 'lib/spec/rails/example/view_example_group.rb', line 137 def render(*args) = Hash === args.last ? args.pop : {} if args.empty? unless [:partial, :inline, :file, :template, :xml, :json, :update].any? {|k| .has_key? k} args << self.class.description_parts.first end end [:template] = args.first.to_s.sub(/^\//,'') unless args.empty? set_base_view_path() add_helpers() assigns[:action_name] = @action_name @request.path_parameters = @request.path_parameters.merge( :controller => derived_controller_name(), :action => derived_action_name() ).merge([:path_parameters] || {}) defaults = { :layout => false } = defaults.merge @controller.__send__(:params).reverse_merge! @request.parameters @controller.class.instance_eval %{ def controller_path "#{derived_controller_name()}" end def controller_name "#{derived_controller_name().split('/').last}" end } @controller.__send__ :forget_variables_added_to_assigns @controller.__send__ :render, @controller.__send__ :process_cleanup end |
#set_base_view_path(options) ⇒ Object
:nodoc:
90 91 92 |
# File 'lib/spec/rails/example/view_example_group.rb', line 90 def set_base_view_path() #:nodoc: ActionView::Base.base_view_path = base_view_path() end |
#subject_of_render(options) ⇒ Object
:nodoc:
108 109 110 111 112 113 114 115 |
# File 'lib/spec/rails/example/view_example_group.rb', line 108 def subject_of_render() #:nodoc: [:template, :partial, :file].each do |render_type| if .has_key?(render_type) return [render_type] end end return "" end |
#template ⇒ Object
This provides the template. Use this to set mock expectations for dealing with partials
Example
describe "/person/new" do
it "should use the form partial" do
template.should_receive(:render).with(:partial => 'form')
render "/person/new"
end
end
189 190 191 |
# File 'lib/spec/rails/example/view_example_group.rb', line 189 def template @controller.template end |