Module: ViewComponent::RenderPreviewHelper

Defined in:
lib/view_component/render_preview_helper.rb

Instance Method Summary collapse

Instance Method Details

#render_preview(name) ⇒ Nokogiri::HTML

Render a preview inline. Internally sets ‘page` to be a `Capybara::Node::Simple`, allowing for Capybara assertions to be used:

“‘ruby render_preview(:default) assert_text(“Hello, World!”) “`

Note: ‘#rendered_preview` expects a preview to be defined with the same class name as the calling test, but with `Test` replaced with `Preview`:

MyComponentTest -> MyComponentPreview etc.

Parameters:

  • preview (String)

    The name of the preview to be rendered.

Returns:

  • (Nokogiri::HTML)


20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/view_component/render_preview_helper.rb', line 20

def render_preview(name)
  begin
    preview_klass = self.class.name.gsub("Test", "Preview")
    preview_klass = preview_klass.constantize
  rescue NameError
    raise NameError.new(
      "`render_preview` expected to find #{preview_klass}, but it does not exist."
    )
  end

  previews_controller = build_controller(ViewComponent::Base.preview_controller.constantize)
  previews_controller.request.params[:path] = "#{preview_klass.preview_name}/#{name}"
  previews_controller.response = ActionDispatch::Response.new
  result = previews_controller.previews

  @rendered_content = result

  Nokogiri::HTML.fragment(@rendered_content)
end