Skip to content

Commit d2034eb

Browse files
committed
Enhance documentation and tests for VerifiedDoubles cop
While reviewing the following PR, I noticed that there is no documentation for cop_config in the relevant Cop, so I will add it. - #2112
1 parent 812bdfe commit d2034eb

File tree

3 files changed

+128
-4
lines changed

3 files changed

+128
-4
lines changed

docs/modules/ROOT/pages/cops_rspec.adoc

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6598,18 +6598,82 @@ Prefer using verifying doubles over normal doubles.
65986598
----
65996599
# bad
66006600
let(:foo) do
6601-
double(method_name: 'returned value')
6601+
double("ClassName", method_name: 'returned value')
66026602
end
66036603
66046604
# bad
66056605
let(:foo) do
6606-
double("ClassName", method_name: 'returned value')
6606+
spy("ClassName", method_name: 'returned value')
66076607
end
66086608
66096609
# good
66106610
let(:foo) do
66116611
instance_double("ClassName", method_name: 'returned value')
66126612
end
6613+
6614+
# good
6615+
let(:foo) do
6616+
class_double("ClassName", method_name: 'returned value')
6617+
end
6618+
6619+
# good
6620+
let(:foo) do
6621+
object_double("some object", method_name: 'returned value')
6622+
end
6623+
----
6624+
6625+
[#_ignorenameless_-true-_default__-rspecverifieddoubles]
6626+
==== `IgnoreNameless: true (default)`
6627+
6628+
[source,ruby]
6629+
----
6630+
# good
6631+
let(:foo) do
6632+
double(method_name: 'returned value')
6633+
end
6634+
6635+
# good
6636+
let(:foo) do
6637+
double
6638+
end
6639+
----
6640+
6641+
[#_ignorenameless_-false_-rspecverifieddoubles]
6642+
==== `IgnoreNameless: false`
6643+
6644+
[source,ruby]
6645+
----
6646+
# bad
6647+
let(:foo) do
6648+
double(method_name: 'returned value')
6649+
end
6650+
6651+
# bad
6652+
let(:foo) do
6653+
double
6654+
end
6655+
----
6656+
6657+
[#_ignoresymbolicnames_-false-_default__-rspecverifieddoubles]
6658+
==== `IgnoreSymbolicNames: false (default)`
6659+
6660+
[source,ruby]
6661+
----
6662+
# bad
6663+
let(:foo) do
6664+
double(:foo)
6665+
end
6666+
----
6667+
6668+
[#_ignoresymbolicnames_-true_-rspecverifieddoubles]
6669+
==== `IgnoreSymbolicNames: true`
6670+
6671+
[source,ruby]
6672+
----
6673+
# good
6674+
let(:foo) do
6675+
double(:foo)
6676+
end
66136677
----
66146678
66156679
[#configurable-attributes-rspecverifieddoubles]

lib/rubocop/cop/rspec/verified_doubles.rb

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,63 @@ module RSpec
1010
# @example
1111
# # bad
1212
# let(:foo) do
13-
# double(method_name: 'returned value')
13+
# double("ClassName", method_name: 'returned value')
1414
# end
1515
#
1616
# # bad
1717
# let(:foo) do
18-
# double("ClassName", method_name: 'returned value')
18+
# spy("ClassName", method_name: 'returned value')
1919
# end
2020
#
2121
# # good
2222
# let(:foo) do
2323
# instance_double("ClassName", method_name: 'returned value')
2424
# end
2525
#
26+
# # good
27+
# let(:foo) do
28+
# class_double("ClassName", method_name: 'returned value')
29+
# end
30+
#
31+
# # good
32+
# let(:foo) do
33+
# object_double("some object", method_name: 'returned value')
34+
# end
35+
#
36+
# @example `IgnoreNameless: true (default)`
37+
# # good
38+
# let(:foo) do
39+
# double(method_name: 'returned value')
40+
# end
41+
#
42+
# # good
43+
# let(:foo) do
44+
# double
45+
# end
46+
#
47+
# @example `IgnoreNameless: false`
48+
# # bad
49+
# let(:foo) do
50+
# double(method_name: 'returned value')
51+
# end
52+
#
53+
# # bad
54+
# let(:foo) do
55+
# double
56+
# end
57+
#
58+
# @example `IgnoreSymbolicNames: false (default)`
59+
# # bad
60+
# let(:foo) do
61+
# double(:foo)
62+
# end
63+
#
64+
# @example `IgnoreSymbolicNames: true`
65+
# # good
66+
# let(:foo) do
67+
# double(:foo)
68+
# end
69+
#
2670
class VerifiedDoubles < Base
2771
MSG = 'Prefer using verifying doubles over normal doubles.'
2872
RESTRICT_ON_SEND = %i[double spy].freeze

spec/rubocop/cop/rspec/verified_doubles_spec.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,20 @@
8181
end
8282
RUBY
8383
end
84+
85+
it 'ignores class_doubles' do
86+
expect_no_offenses(<<~RUBY)
87+
it do
88+
foo = class_double("Foo")
89+
end
90+
RUBY
91+
end
92+
93+
it 'ignores object_doubles' do
94+
expect_no_offenses(<<~RUBY)
95+
it do
96+
foo = object_double("Foo")
97+
end
98+
RUBY
99+
end
84100
end

0 commit comments

Comments
 (0)