DEV: support nil values in the eq_time matcher (#22116)

We use it like this:

    expect(message.created_at).to eq_time(created_at)

The problem is that if one of the values or both of them are `nil` the matcher fails 
with this error:

    NoMethodError: undefined method `-' for nil:NilClass

This commit adds support for `nil` values. If both time values are `nil` they are equal, 
if only one value is `nil` they aren't.
This commit is contained in:
Andrei Prigorshnev 2023-06-20 19:06:40 +04:00 committed by GitHub
parent e51bbfa4e8
commit c5c043d9e2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 5 additions and 1 deletions

View File

@ -11,7 +11,11 @@ RSpec::Matchers.define :be_within_one_minute_of do |expected_time|
end end
RSpec::Matchers.define :eq_time do |expected_time| RSpec::Matchers.define :eq_time do |expected_time|
match { |actual_time| (actual_time - expected_time).abs < 0.001 } match do |actual_time|
return true if expected_time.nil? && actual_time.nil?
return false if expected_time.nil? || actual_time.nil?
(actual_time - expected_time).abs < 0.001
end
failure_message { |actual_time| "#{actual_time} is not within 1 millisecond of #{expected_time}" } failure_message { |actual_time| "#{actual_time} is not within 1 millisecond of #{expected_time}" }
failure_message_when_negated do |actual_time| failure_message_when_negated do |actual_time|
"#{actual_time} is within 1 millisecond of #{expected_time}" "#{actual_time} is within 1 millisecond of #{expected_time}"