diff --git a/docs/modules/ROOT/pages/cops_rspec.adoc b/docs/modules/ROOT/pages/cops_rspec.adoc index 9c3dce6ce..cfa5c0f07 100644 --- a/docs/modules/ROOT/pages/cops_rspec.adoc +++ b/docs/modules/ROOT/pages/cops_rspec.adoc @@ -6598,18 +6598,82 @@ Prefer using verifying doubles over normal doubles. ---- # bad let(:foo) do - double(method_name: 'returned value') + double("ClassName", method_name: 'returned value') end # bad let(:foo) do - double("ClassName", method_name: 'returned value') + spy("ClassName", method_name: 'returned value') end # good let(:foo) do instance_double("ClassName", method_name: 'returned value') end + +# good +let(:foo) do + class_double("ClassName", method_name: 'returned value') +end + +# good +let(:foo) do + object_double("some object", method_name: 'returned value') +end +---- + +[#_ignorenameless_-true-_default__-rspecverifieddoubles] +==== `IgnoreNameless: true (default)` + +[source,ruby] +---- +# good +let(:foo) do + double(method_name: 'returned value') +end + +# good +let(:foo) do + double +end +---- + +[#_ignorenameless_-false_-rspecverifieddoubles] +==== `IgnoreNameless: false` + +[source,ruby] +---- +# bad +let(:foo) do + double(method_name: 'returned value') +end + +# bad +let(:foo) do + double +end +---- + +[#_ignoresymbolicnames_-false-_default__-rspecverifieddoubles] +==== `IgnoreSymbolicNames: false (default)` + +[source,ruby] +---- +# bad +let(:foo) do + double(:foo) +end +---- + +[#_ignoresymbolicnames_-true_-rspecverifieddoubles] +==== `IgnoreSymbolicNames: true` + +[source,ruby] +---- +# good +let(:foo) do + double(:foo) +end ---- [#configurable-attributes-rspecverifieddoubles] diff --git a/lib/rubocop/cop/rspec/verified_doubles.rb b/lib/rubocop/cop/rspec/verified_doubles.rb index 51c6137c0..7f2c3cfb1 100644 --- a/lib/rubocop/cop/rspec/verified_doubles.rb +++ b/lib/rubocop/cop/rspec/verified_doubles.rb @@ -10,12 +10,12 @@ module RSpec # @example # # bad # let(:foo) do - # double(method_name: 'returned value') + # double("ClassName", method_name: 'returned value') # end # # # bad # let(:foo) do - # double("ClassName", method_name: 'returned value') + # spy("ClassName", method_name: 'returned value') # end # # # good @@ -23,6 +23,50 @@ module RSpec # instance_double("ClassName", method_name: 'returned value') # end # + # # good + # let(:foo) do + # class_double("ClassName", method_name: 'returned value') + # end + # + # # good + # let(:foo) do + # object_double("some object", method_name: 'returned value') + # end + # + # @example `IgnoreNameless: true (default)` + # # good + # let(:foo) do + # double(method_name: 'returned value') + # end + # + # # good + # let(:foo) do + # double + # end + # + # @example `IgnoreNameless: false` + # # bad + # let(:foo) do + # double(method_name: 'returned value') + # end + # + # # bad + # let(:foo) do + # double + # end + # + # @example `IgnoreSymbolicNames: false (default)` + # # bad + # let(:foo) do + # double(:foo) + # end + # + # @example `IgnoreSymbolicNames: true` + # # good + # let(:foo) do + # double(:foo) + # end + # class VerifiedDoubles < Base MSG = 'Prefer using verifying doubles over normal doubles.' RESTRICT_ON_SEND = %i[double spy].freeze diff --git a/spec/rubocop/cop/rspec/verified_doubles_spec.rb b/spec/rubocop/cop/rspec/verified_doubles_spec.rb index 27e7cb549..a64407201 100644 --- a/spec/rubocop/cop/rspec/verified_doubles_spec.rb +++ b/spec/rubocop/cop/rspec/verified_doubles_spec.rb @@ -81,4 +81,20 @@ end RUBY end + + it 'ignores class_doubles' do + expect_no_offenses(<<~RUBY) + it do + foo = class_double("Foo") + end + RUBY + end + + it 'ignores object_doubles' do + expect_no_offenses(<<~RUBY) + it do + foo = object_double("Foo") + end + RUBY + end end