Skip to content

Commit b2d6f8e

Browse files
author
Sam Phippen
committed
Merge pull request #1499 from rspec/fix-helper-specs-with-internal-classes
Fix helper specs with internal classes
2 parents 67759ba + ae6ff7b commit b2d6f8e

File tree

2 files changed

+34
-8
lines changed

2 files changed

+34
-8
lines changed

lib/rspec/rails/example/helper_example_group.rb

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,15 @@ module HelperExampleGroup
1212

1313
# @private
1414
module ClassMethods
15-
def determine_default_helper_class(_ignore)
16-
described_class
15+
if ::Rails::VERSION::MAJOR > 3
16+
def determine_constant_from_test_name(_ignore)
17+
described_class if yield(described_class)
18+
end
19+
else
20+
def determine_default_helper_class(_ignore)
21+
return unless Module === described_class && !(Class === described_class)
22+
described_class
23+
end
1724
end
1825
end
1926

spec/rspec/rails/example/helper_example_group_spec.rb

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,11 @@
22

33
module RSpec::Rails
44
describe HelperExampleGroup do
5-
module ::FoosHelper; end
5+
module ::FoosHelper
6+
class InternalClass
7+
end
8+
end
9+
610
subject { HelperExampleGroup }
711

812
it_behaves_like "an rspec-rails example group mixin", :helper,
@@ -48,11 +52,26 @@ def _view
4852

4953
describe HelperExampleGroup::ClassMethods do
5054
describe "determine_default_helper_class" do
51-
it "returns the helper module passed to describe" do
52-
helper_spec = Object.new.extend HelperExampleGroup::ClassMethods
53-
allow(helper_spec).to receive(:described_class) { FoosHelper }
54-
expect(helper_spec.determine_default_helper_class("ignore this")).
55-
to eq(FoosHelper)
55+
let(:group) do
56+
RSpec::Core::ExampleGroup.describe do
57+
include HelperExampleGroup
58+
end
59+
end
60+
61+
context "the described is a module" do
62+
it "returns the module" do
63+
allow(group).to receive(:described_class) { FoosHelper }
64+
expect(group.determine_default_helper_class("ignore this")).
65+
to eq(FoosHelper)
66+
end
67+
end
68+
69+
context "the described is a class" do
70+
it "returns nil" do
71+
allow(group).to receive(:described_class) { FoosHelper::InternalClass }
72+
expect(group.determine_default_helper_class("ignore this")).
73+
to be_nil
74+
end
5675
end
5776
end
5877
end

0 commit comments

Comments
 (0)