File tree Expand file tree Collapse file tree 2 files changed +40
-1
lines changed Expand file tree Collapse file tree 2 files changed +40
-1
lines changed Original file line number Diff line number Diff line change @@ -13,6 +13,14 @@ module ViewExampleGroup
13
13
include RSpec ::Rails ::ViewAssigns
14
14
include RSpec ::Rails ::Matchers ::RenderTemplate
15
15
16
+ # @private
17
+ module StubResolverCache
18
+ def self . resolver_for ( hash )
19
+ @resolvers ||= { }
20
+ @resolvers [ hash ] ||= ActionView ::FixtureResolver . new ( hash )
21
+ end
22
+ end
23
+
16
24
# @private
17
25
module ClassMethods
18
26
def _default_helper
@@ -84,7 +92,7 @@ def view
84
92
#
85
93
# stub_template("widgets/_widget.html.erb" => "This content.")
86
94
def stub_template ( hash )
87
- view . view_paths . unshift ( ActionView :: FixtureResolver . new ( hash ) )
95
+ view . view_paths . unshift ( StubResolverCache . resolver_for ( hash ) )
88
96
end
89
97
90
98
# Provides access to the params hash that will be available within the
Original file line number Diff line number Diff line change @@ -254,5 +254,36 @@ def _view; end
254
254
view_spec . template
255
255
end
256
256
end
257
+
258
+ describe '#stub_template' do
259
+ let ( :view_spec_group ) do
260
+ Class . new do
261
+ include ViewExampleGroup ::ExampleMethods
262
+ def _view
263
+ @_view ||= Struct . new ( :view_paths ) . new ( [ 'some-path' ] )
264
+ end
265
+ end
266
+ end
267
+
268
+ it 'prepends an ActionView::FixtureResolver to the view path' do
269
+ view_spec = view_spec_group . new
270
+ view_spec . stub_template ( 'some_path/some_template' => 'stubbed-contents' )
271
+
272
+ result = view_spec . view . view_paths . first
273
+
274
+ expect ( result ) . to be_instance_of ( ActionView ::FixtureResolver )
275
+ expect ( result . hash ) . to eq ( 'some_path/some_template' => 'stubbed-contents' )
276
+ end
277
+
278
+ it 'caches FixtureResolver instances between example groups' do
279
+ view_spec_one = view_spec_group . new
280
+ view_spec_two = view_spec_group . new
281
+
282
+ view_spec_one . stub_template ( 'some_path/some_template' => 'stubbed-contents' )
283
+ view_spec_two . stub_template ( 'some_path/some_template' => 'stubbed-contents' )
284
+
285
+ expect ( view_spec_one . view . view_paths . first ) . to eq ( view_spec_two . view . view_paths . first )
286
+ end
287
+ end
257
288
end
258
289
end
You can’t perform that action at this time.
0 commit comments