From 7ed426c1a5f003c6f871b598b78637cf12738e51 Mon Sep 17 00:00:00 2001 From: Thomas Hutterer Date: Tue, 28 Jun 2022 15:08:23 +0200 Subject: [PATCH] Add support for RSpec to previews as test cases --- docs/CHANGELOG.md | 4 ++++ lib/view_component/render_preview_helper.rb | 10 ++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 9463e56ca7..5c950557b9 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -9,6 +9,10 @@ title: Changelog ## main +* Add support for RSpec to previews as test cases + + *Thomas Hutterer* + * Include polymorphic slots in `ViewComponent::Base` by default. * Add per-component config option for stripping newlines from templates before compilation. diff --git a/lib/view_component/render_preview_helper.rb b/lib/view_component/render_preview_helper.rb index dff5785c26..2419e88c47 100644 --- a/lib/view_component/render_preview_helper.rb +++ b/lib/view_component/render_preview_helper.rb @@ -11,15 +11,21 @@ module RenderPreviewHelper # ``` # # Note: `#rendered_preview` expects a preview to be defined with the same class - # name as the calling test, but with `Test` replaced with `Preview`: + # name as the calling test, but with "Test" replaced with "Preview": # # MyComponentTest -> MyComponentPreview etc. # + # With RSpec it uses `described_class` plus "Preview" as the class name. + # # @param preview [String] The name of the preview to be rendered. # @return [Nokogiri::HTML] def render_preview(name) begin - preview_klass = self.class.name.gsub("Test", "Preview") + preview_klass = if self.respond_to?(:described_class) + "#{self.described_class}Preview" + else + self.class.name.gsub("Test", "Preview") + end preview_klass = preview_klass.constantize rescue NameError raise NameError.new(