Module: RSpec::Rails::ViewExampleGroup::ExampleMethods
Relationships & Source Files | |
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
ActiveSupport::Concern
|
|
Defined in: | rspec-rails/lib/rspec/rails/example/view_example_group.rb |
Overview
DSL exposed to view specs.
Instance Method Summary
-
#params
Provides access to the params hash that will be available within the view.
-
#render
Delegates to ActionView::Base#render, so see documentation on that for more info.
-
#response
deprecated
Deprecated.
Use
rendered
instead. -
#stub_template(hash)
Simulates the presence of a template on the file system by adding a Rails’ FixtureResolver to the front of the view_paths list.
-
#template
deprecated
Deprecated.
Use #view instead.
-
#view
The instance of
ActionView::Base
that is used to render the template. - #_controller_path private
- #_default_render_options private
- #_include_controller_helpers private
- #_inferred_action private
- #_path_parts private
DSL Calls
included
[ GitHub ]Instance Method Details
#_controller_path (private)
[ GitHub ]# File 'rspec-rails/lib/rspec/rails/example/view_example_group.rb', line 166
def _controller_path _path_parts[0..-2].join("/") end
#_default_render_options (private)
[ GitHub ]# File 'rspec-rails/lib/rspec/rails/example/view_example_group.rb', line 128
def formats = if ActionView::Template::Types.respond_to?(:symbols) ActionView::Template::Types.symbols else [:html, :text, :js, :css, :xml, :json].map(&:to_s) end.map { |x| Regexp.escape(x) }.join("|") handlers = ActionView::Template::Handlers.extensions.map { |x| Regexp.escape(x) }.join("|") locales = "[a-z]{2}(?:-[A-Z]{2})?" variants = "[^.]*" path_regex = %r{ \A (?<template>.*?) (?:\.(?<locale>#{locales}))?? (?:\.(?<format>#{formats}))?? (?:\+(?<variant>#{variants}))?? (?:\.(?<handler>#{handlers}))? \z }x # This regex should always find a match. # Worst case, everything will be nil, and :template will just be # the original string. match = path_regex.match(_default_file_to_render) = { template: match[:template] } [:handlers] = [match[:handler].to_sym] if match[:handler] [:formats] = [match[:format].to_sym] if match[:format] [:locales] = [match[:locale].to_sym] if match[:locale] [:variants] = [match[:variant].to_sym] if match[:variant] end
#_include_controller_helpers (private)
[ GitHub ]# File 'rspec-rails/lib/rspec/rails/example/view_example_group.rb', line 174
def _include_controller_helpers helpers = controller._helpers view.singleton_class.class_exec do include helpers unless included_modules.include?(helpers) end end
#_inferred_action (private)
[ GitHub ]# File 'rspec-rails/lib/rspec/rails/example/view_example_group.rb', line 170
def _inferred_action _path_parts.last.split(".").first end
#_path_parts (private)
[ GitHub ]# File 'rspec-rails/lib/rspec/rails/example/view_example_group.rb', line 162
def _path_parts _default_file_to_render.split("/") end
#params
Provides access to the params hash that will be available within the view.
params[:foo] = 'bar'
# File 'rspec-rails/lib/rspec/rails/example/view_example_group.rb', line 100
def params controller.params end
#render
#render({partial: path_to_file})
#render({partial: path_to_file}, {... locals ...})
#render({partial: path_to_file}, {... locals ...}) do ... end)
Delegates to ActionView::Base#render, so see documentation on that for more info.
The only addition is that you can call render with no arguments, and ::RSpec
will pass the top level description to render:
describe "widgets/new.html.erb" do
it "shows all the widgets" do
render # => view.render(file: "widgets/new.html.erb")
# ...
end
end
# File 'rspec-rails/lib/rspec/rails/example/view_example_group.rb', line 66
def render( = {}, local_assigns = {}, &block) = if Hash === && .empty? = .merge( ) if Hash === && .keys == [:locals] super(, local_assigns, &block) end
#response
Use rendered
instead.
# File 'rspec-rails/lib/rspec/rails/example/view_example_group.rb', line 111
def response # `assert_template` expects `response` to implement a #body method # like an `ActionDispatch::Response` does to force the view to # render. For backwards compatibility, we use #response as an alias # for #rendered, but it needs to implement #body to avoid # `assert_template` raising a `NoMethodError`. unless rendered.respond_to?(:body) def rendered.body self end end rendered end
#stub_template(hash)
Simulates the presence of a template on the file system by adding a Rails’ FixtureResolver to the front of the view_paths list. Designed to help isolate view examples from partials rendered by the view template that is the subject of the example.
stub_template("widgets/_widget.html.erb" => "This content.")
# File 'rspec-rails/lib/rspec/rails/example/view_example_group.rb', line 92
def stub_template(hash) controller.prepend_view_path(StubResolverCache.resolver_for(hash)) end
#template
Use #view instead.
#view
# File 'rspec-rails/lib/rspec/rails/example/view_example_group.rb', line 82
def view _view end