Hi,
I am trying to write a custom matcher, but not able to show the diff and
error message correctly. I need help with it.
RSpec::Matchers.define :have_constant do |const|
match do |owner|
owner.const_defined?(const) && owner.const_get(const) == @second
end
chain :with_value do |second|
@second = second
end
diffable
failure_message do |actual|
"expected that #{const} would be defined in #{actual} with #{@second}"
end
end
And the spec is:
describe "FeatureService" do
describe 'constants' do
subject { FeatureService }
it { is_expected.to
have_constant(:IMO_NUMBER_VALIDATION).with_value('6cjXBWdq') }
it { is_expected.to have_constant(:JOB_TYPES).with_value('6cjXBWdq') }
# ...
end
end
The actual class is:
class FeatureService
JOB_TYPES = 'WN2HsoIm'.freeze
#...
end
When I run the test the failure message is not quiet helpful. So how can I
tweak the custom matcher so that it can be helpful when it writes to stdout
than what I see currently.
$ rspec ./spec/services/feature_service_spec.rb:8
Run options: include
{:locations=>{"./spec/services/feature_service_spec.rb"=>[8]}}
F
Failures:
1) FeatureService constants should have constant :JOB_TYPES with value
"6cjXBWdq"
Failure/Error: it { is_expected.to
have_constant(:JOB_TYPES).with_value('6cjXBWdq') }
expected that JOB_TYPES would be defined in FeatureService with
6cjXBWdq
Diff:
@@ -1,2 +1,2 @@
-:JOB_TYPES
+FeatureService
# ./spec/services/feature_service_spec.rb:8:in `block (3 levels) in
<top (required)>'
--
You received this message because you are subscribed to the Google Groups
"rspec" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/rspec/c63b8701-e572-4ac7-83d1-5f6750a66533%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.