Skip to content
This repository was archived by the owner on Nov 30, 2024. It is now read-only.

Commit ad75824

Browse files
committed
Merge pull request #190 from sivagollapalli/double_inspect
Object inspector now supports test double
2 parents ef28302 + d5d7a12 commit ad75824

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

Diff for: lib/rspec/support/object_inspector.rb

+12
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ def self.inspect(object)
1414
elsif RSpec::Support.is_a_matcher?(object) && object.respond_to?(:description)
1515
object.description
1616
else
17+
registered_klasses.each do |klass, inspector|
18+
return inspector.call(object) if klass === object
19+
end
20+
1721
object.inspect
1822
end
1923
end
@@ -43,6 +47,14 @@ def self.format_date_time(date_time)
4347
date_time.inspect
4448
end
4549
end
50+
51+
def self.register(klass, &block)
52+
registered_klasses[klass] = block
53+
end
54+
55+
def self.registered_klasses
56+
@registered_klasses ||= {}
57+
end
4658
end
4759
end
4860
end

Diff for: spec/rspec/support/object_inspector_spec.rb

+29
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,35 @@ def with_date_loaded
9292
matcher_without_a_description.inspect)
9393
end
9494
end
95+
96+
context "with arbitary types" do
97+
class User
98+
attr_accessor :name
99+
100+
def initialize(name)
101+
@name = name
102+
end
103+
end
104+
105+
before(:context) do
106+
ObjectInspector.register User do |user|
107+
"User (#{user.name})"
108+
end
109+
end
110+
111+
it "works with custom class" do
112+
user = User.new("FooBar")
113+
expect(ObjectInspector.inspect(user)).to eq("User (FooBar)")
114+
end
115+
116+
it "works with subclasses" do
117+
class Admin < User
118+
end
119+
120+
admin = Admin.new("FooBar")
121+
expect(ObjectInspector.inspect(admin)).to eq("User (FooBar)")
122+
end
123+
end
95124
end
96125
end
97126
end

0 commit comments

Comments
 (0)