Skip to content

Commit 2f88815

Browse files
committed
Share the view context in tests
1 parent 6a33362 commit 2f88815

File tree

4 files changed

+29
-3
lines changed

4 files changed

+29
-3
lines changed

lib/view_component/test_helpers.rb

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,19 @@ def assert_component_rendered
3838
# @return [Nokogiri::HTML5]
3939
def render_inline(component, **args, &block)
4040
@page = nil
41-
@rendered_content = vc_test_controller.view_context.render(component, args, &block)
41+
@rendered_content = vc_test_view_context.render(component, args, &block)
4242

43-
Nokogiri::HTML5.fragment(@rendered_content)
43+
fragment = Nokogiri::HTML5.fragment(@rendered_content)
44+
@vc_test_view_context = nil
45+
fragment
46+
end
47+
48+
# Returns the view context used to render components in tests. Note that the view context
49+
# is reset after each call to `render_inline`.
50+
#
51+
# @return [ActionView::Base]
52+
def vc_test_view_context
53+
@vc_test_view_context ||= vc_test_controller.view_context
4454
end
4555

4656
# `JSON.parse`-d component output.
@@ -103,7 +113,7 @@ def render_preview(name, from: __vc_test_helpers_preview_class, params: {})
103113
# ```
104114
def render_in_view_context(...)
105115
@page = nil
106-
@rendered_content = vc_test_controller.view_context.instance_exec(...)
116+
@rendered_content = vc_test_view_context.instance_exec(...)
107117
Nokogiri::HTML5.fragment(@rendered_content)
108118
end
109119

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<%= @builder.label :foo do %>
2+
<%= content %>
3+
<% end %>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# frozen_string_literal: true
2+
3+
class CustomFormBuilderComponent < ViewComponent::Base
4+
def initialize(builder:)
5+
@builder = builder
6+
end
7+
end

test/sandbox/test/test_helper_test.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,10 @@ def test_with_request_url_under_constraint
4343
def test_vc_test_controller_exists
4444
assert vc_test_controller.is_a?(ActionController::Base)
4545
end
46+
47+
def test_vc_test_view_context_is_shared_reference
48+
builder = ActionView::Helpers::FormBuilder.new(nil, Object.new, vc_test_view_context, {})
49+
render_inline(CustomFormBuilderComponent.new(builder: builder)) { "Label content" }
50+
assert_selector("label[for=foo]", text: "Label content")
51+
end
4652
end

0 commit comments

Comments
 (0)