allow_value: Inspect values more clearly

Modify descriptions and failure messages for all matchers by way of
allow_value and put small angle brackets around inspected values. This
is to visually distinguish an inspected value from the rest of the text,
and is especially noticeable for complex values such as an array that
contains an object, particularly if the inspected version of the value
wraps onto another line. It's a little easier to see:

    When attempting to set :attr on Example to ‹[#<Child id:
    nil>]›...

rather than:

    When attempting to set :attr on Example to [#<Child id:
    nil>]...
This commit is contained in:
Elliot Winkler 2015-12-22 02:00:51 -05:00
parent 417f289a86
commit 6b3253147a
17 changed files with 200 additions and 169 deletions

View File

@ -463,11 +463,14 @@ module Shoulda
end
if expected_message.is_a?(Regexp)
message << ' matching'
message << ' matching '
message << Shoulda::Matchers::Util.inspect_value(
expected_message
)
else
message << " #{expected_message.inspect}"
end
message << " #{expected_message.inspect}"
unless validator.captured_validation_exception?
message << " on :#{attribute_to_check_message_against}"
end
@ -577,14 +580,10 @@ module Shoulda
end
def inspected_values_to_set
if values_to_set.size > 1
values_to_set.map(&:inspect).to_sentence(
two_words_connector: " or ",
last_word_connector: ", or"
)
else
values_to_set.first.inspect
end
Shoulda::Matchers::Util.inspect_values(values_to_set).to_sentence(
two_words_connector: " or ",
last_word_connector: ", or"
)
end
def default_expected_message

View File

@ -25,11 +25,13 @@ module Shoulda
end
def description
description = ":#{attribute_name} to #{value_written.inspect}"
description = ":#{attribute_name} to "
description << Shoulda::Matchers::Util.inspect_value(value_written)
if attribute_changed_value?
description << " -- which was read back as "
description << "#{value_read.inspect} --"
description << Shoulda::Matchers::Util.inspect_value(value_read)
description << " --"
end
description

View File

@ -141,17 +141,15 @@ module Shoulda
def simple_description
if @range
"validate that :#{@attribute} lies outside the range #{@range.inspect}"
"validate that :#{@attribute} lies outside the range " +
Shoulda::Matchers::Util.inspect_range(@range)
else
description = "validate that :#{@attribute}"
if @array.many?
description << " is neither " + @array.map(&:inspect).to_sentence(
two_words_connector: " nor ",
last_word_connector: ", nor "
)
description << " is neither #{inspected_array}"
else
description << " is not #{@array.first.inspect}"
description << " is not #{inspected_array}"
end
description
@ -202,6 +200,13 @@ module Shoulda
@array.inspect
end
end
def inspected_array
Shoulda::Matchers::Util.inspect_values(@array).to_sentence(
two_words_connector: " nor ",
last_word_connector: ", nor "
)
end
end
end
end

View File

@ -352,17 +352,15 @@ EOT
def simple_description
if @range
"validate that :#{@attribute} lies inside the range #{@range.inspect}"
"validate that :#{@attribute} lies inside the range " +
Shoulda::Matchers::Util.inspect_range(@range)
else
description = "validate that :#{@attribute}"
if @array.many?
description << " is either " + @array.map(&:inspect).to_sentence(
two_words_connector: " or ",
last_word_connector: ", or "
)
description << " is either #{inspected_array}"
else
description << " is #{@array.first.inspect}"
description << " is #{inspected_array}"
end
description
@ -552,6 +550,13 @@ EOT
else :unknown
end
end
def inspected_array
Shoulda::Matchers::Util.inspect_values(@array).to_sentence(
two_words_connector: " or ",
last_word_connector: ", or "
)
end
end
end
end

View File

@ -682,27 +682,35 @@ module Shoulda
if @existing_record_created
prefix << "After taking the given #{model.name},"
prefix << " setting its :#{attribute} to"
prefix << " #{existing_value.inspect},"
prefix << " and saving it as the existing record,"
prefix << " setting its :#{attribute} to "
prefix << Shoulda::Matchers::Util.inspect_value(existing_value)
prefix << ", and saving it as the existing record,"
prefix << " then"
elsif @original_existing_value != existing_value
prefix << "Given an existing #{model.name},"
prefix << " after setting its :#{attribute} to"
prefix << " #{existing_value.inspect}, then"
prefix << " after setting its :#{attribute} to "
prefix << Shoulda::Matchers::Util.inspect_value(existing_value)
prefix << ", then"
else
prefix << "Given an existing #{model.name} whose :#{attribute}"
prefix << " is #{existing_value.inspect}, after"
prefix << " is "
prefix << Shoulda::Matchers::Util.inspect_value(existing_value)
prefix << ", after"
end
prefix << " making a new #{model.name} and setting its"
prefix << " :#{attribute} to"
prefix << " :#{attribute} to "
if last_value_set_on_new_record == existing_value
prefix << " #{last_value_set_on_new_record.inspect} as well"
prefix << Shoulda::Matchers::Util.inspect_value(
last_value_set_on_new_record
)
prefix << " as well"
else
prefix << " a different value,"
prefix << " #{last_value_set_on_new_record.inspect}"
prefix << " a different value, "
prefix << Shoulda::Matchers::Util.inspect_value(
last_value_set_on_new_record
)
end
prefix << ", the matcher expected the new #{model.name} to be"

View File

@ -38,6 +38,18 @@ module Shoulda
"a #{next_word}"
end
end
def self.inspect_value(value)
"#{value.inspect}"
end
def self.inspect_values(values)
values.map { |value| inspect_value(value) }
end
def self.inspect_range(range)
"#{inspect_value(range.first)} to #{inspect_value(range.last)}"
end
end
end
end

View File

@ -14,14 +14,14 @@ describe Shoulda::Matchers::ActiveModel::AllowValueMatcher, type: :model do
matcher = allow_value('foo', 'bar').for(:baz)
expect(matcher.description).to eq(
'allow :baz to be "foo" or "bar"'
'allow :baz to be "foo" or "bar"'
)
end
it 'describes itself with a single value' do
matcher = allow_value('foo').for(:baz)
expect(matcher.description).to eq 'allow :baz to be "foo"'
expect(matcher.description).to eq 'allow :baz to be "foo"'
end
if active_model_3_2?
@ -29,7 +29,7 @@ describe Shoulda::Matchers::ActiveModel::AllowValueMatcher, type: :model do
strict_matcher = allow_value('xyz').for(:attr).strict
expect(strict_matcher.description).to eq(
'allow :attr to be "xyz", raising a validation exception on failure'
'allow :attr to be "xyz", raising a validation exception on failure'
)
end
end
@ -56,7 +56,7 @@ describe Shoulda::Matchers::ActiveModel::AllowValueMatcher, type: :model do
it 'rejects a bad value with an appropriate failure message' do
message = <<-MESSAGE
After setting :attr to "xyz", the matcher expected the Example to be
After setting :attr to "xyz", the matcher expected the Example to be
valid, but it was invalid instead, producing these validation errors:
* attr: ["is invalid"]
@ -84,7 +84,7 @@ valid, but it was invalid instead, producing these validation errors:
it 'produces an appropriate failure message' do
message = <<-MESSAGE
After setting :attr to "zyx", the matcher expected the Example to be
After setting :attr to "zyx", the matcher expected the Example to be
valid, but it was invalid instead, producing these validation errors:
* attr: ["is invalid"]
@ -110,7 +110,7 @@ valid, but it was invalid instead, producing these validation errors:
it 'rejects a bad value with an appropriate failure message' do
message = <<-MESSAGE
After setting :attr to "xyz", the matcher expected the Example to be
After setting :attr to "xyz", the matcher expected the Example to be
valid, but it was invalid instead, producing these validation errors:
* attr: ["bad value"]
@ -127,10 +127,10 @@ valid, but it was invalid instead, producing these validation errors:
context 'when the custom messages do not match' do
it 'rejects with an appropriate failure message' do
message = <<-MESSAGE
After setting :attr to "xyz", the matcher expected the Example to be
invalid and to produce a validation error matching /different/ on :attr.
The record was indeed invalid, but it produced these validation errors
instead:
After setting :attr to "xyz", the matcher expected the Example to be
invalid and to produce a validation error matching /different/ on
:attr. The record was indeed invalid, but it produced these validation
errors instead:
* attr: ["bad value"]
MESSAGE
@ -186,7 +186,7 @@ instead:
end
message = <<-MESSAGE
After setting :attr to "xyz", the matcher expected the Example to be
After setting :attr to "xyz", the matcher expected the Example to be
invalid and to produce the validation error "must be greater than 2" on
:attr. The record was indeed invalid, but it produced these validation
errors instead:
@ -249,7 +249,7 @@ errors instead:
end
message = <<-MESSAGE
After setting :#{builder.attribute_to_validate} to "#{invalid_value}", the
After setting :#{builder.attribute_to_validate} to "#{invalid_value}", the
matcher expected the #{builder.model.name} to be invalid and to produce the validation
error "some error" on :#{builder.attribute_that_receives_error}. The record was
indeed invalid, but it produced these validation errors instead:
@ -341,7 +341,7 @@ indeed invalid, but it produced these validation errors instead:
it "does not match given good values along with bad values" do
message = <<-MESSAGE.strip_heredoc
After setting :attr to "12345", the matcher expected the Example to be
After setting :attr to "12345", the matcher expected the Example to be
invalid, but it was valid instead.
MESSAGE
@ -375,7 +375,7 @@ invalid, but it was valid instead.
context 'when qualified with strict' do
it 'rejects a bad value, providing the correct failure message' do
message = <<-MESSAGE.strip_heredoc
After setting :attr to "xyz", the matcher expected the Example to be
After setting :attr to "xyz", the matcher expected the Example to be
valid, but it was invalid instead, raising a validation exception with
the message "Attr is invalid".
MESSAGE
@ -391,10 +391,10 @@ the message "Attr is invalid".
context 'qualified with a custom message' do
it 'rejects a bad value when the failure messages do not match' do
message = <<-MESSAGE.strip_heredoc
After setting :attr to "xyz", the matcher expected the Example to be
invalid and to raise a validation exception with message matching /abc/.
The record was indeed invalid, but the exception message was "Attr is
invalid" instead.
After setting :attr to "xyz", the matcher expected the Example to be
invalid and to raise a validation exception with message matching
/abc/. The record was indeed invalid, but the exception message was
"Attr is invalid" instead.
MESSAGE
assertion = lambda do

View File

@ -21,7 +21,7 @@ describe Shoulda::Matchers::ActiveModel::NumericalityMatchers::EvenNumberMatcher
end
message = <<-MESSAGE.strip_heredoc
After setting :attr to "1", the matcher expected the Example to be
After setting :attr to "1", the matcher expected the Example to be
invalid, but it was valid instead.
MESSAGE

View File

@ -21,7 +21,7 @@ describe Shoulda::Matchers::ActiveModel::NumericalityMatchers::OddNumberMatcher
end
message = <<-MESSAGE.strip_heredoc
After setting :attr to "2", the matcher expected the Example to be
After setting :attr to "2", the matcher expected the Example to be
invalid, but it was valid instead.
MESSAGE

View File

@ -31,7 +31,7 @@ describe Shoulda::Matchers::ActiveModel::NumericalityMatchers::OnlyIntegerMatche
end
message = <<-MESSAGE
After setting :attr to "0.1", the matcher expected the Example to be
After setting :attr to "0.1", the matcher expected the Example to be
invalid, but it was valid instead.
MESSAGE

View File

@ -42,8 +42,8 @@ describe Shoulda::Matchers::ActiveModel::ValidateAbsenceOfMatcher, type: :model
message = <<-MESSAGE
Example did not properly validate that :attr is empty/falsy.
After setting :attr to "an arbitrary value", the matcher expected the
Example to be invalid, but it was valid instead.
After setting :attr to "an arbitrary value", the matcher expected
the Example to be invalid, but it was valid instead.
MESSAGE
assertion = lambda do
@ -68,8 +68,8 @@ Example did not properly validate that :attr is empty/falsy.
it 'rejects with the correct failure message' do
message = <<-MESSAGE
Example did not properly validate that :attr is empty/falsy.
After setting :attr to "an arbitrary value", the matcher expected the
Example to be invalid, but it was valid instead.
After setting :attr to "an arbitrary value", the matcher expected
the Example to be invalid, but it was valid instead.
MESSAGE
assertion = lambda do
@ -106,7 +106,7 @@ Example did not properly validate that :attr is empty/falsy.
message = <<-MESSAGE
Parent did not properly validate that :children is empty/falsy.
After setting :children to [#<Child id: nil>], the matcher expected
After setting :children to [#<Child id: nil>], the matcher expected
the Parent to be invalid, but it was valid instead.
MESSAGE

View File

@ -82,8 +82,8 @@ on the Example, but that attribute does not exist.
message = <<-MESSAGE
Example did not properly validate that
:attribute_to_confirm_confirmation matches :attribute_to_confirm.
After setting :attribute_to_confirm_confirmation to "some value", then
setting :attribute_to_confirm to "different value", the matcher
After setting :attribute_to_confirm_confirmation to "some value",
then setting :attribute_to_confirm to "different value", the matcher
expected the Example to be invalid, but it was valid instead.
MESSAGE

View File

@ -62,7 +62,7 @@ describe Shoulda::Matchers::ActiveModel::ValidateExclusionOfMatcher, type: :mode
matcher = validate_exclusion_of(:attr).in_range(1..10)
expect(matcher.description).to eq(
'validate that :attr lies outside the range 1..10'
'validate that :attr lies outside the range 1 to 10'
)
end
end
@ -86,7 +86,7 @@ describe Shoulda::Matchers::ActiveModel::ValidateExclusionOfMatcher, type: :mode
context 'when there is one value' do
it 'has correct description' do
expect(validate_exclusion_of(:attr).in_array([true]).description).
to eq 'validate that :attr is not true'
to eq 'validate that :attr is not true'
end
end
@ -95,7 +95,7 @@ describe Shoulda::Matchers::ActiveModel::ValidateExclusionOfMatcher, type: :mode
matcher = validate_exclusion_of(:attr).in_array([true, 'dog'])
expect(matcher.description).to eq(
'validate that :attr is neither true nor "dog"'
'validate that :attr is neither true nor "dog"'
)
end
end
@ -105,7 +105,7 @@ describe Shoulda::Matchers::ActiveModel::ValidateExclusionOfMatcher, type: :mode
matcher = validate_exclusion_of(:attr).in_array([true, 'dog', 'cat'])
expect(matcher.description).to eq(
'validate that :attr is neither true, "dog", nor "cat"'
'validate that :attr is neither true, "dog", nor "cat"'
)
end
end

View File

@ -686,7 +686,7 @@ describe Shoulda::Matchers::ActiveModel::ValidateInclusionOfMatcher, type: :mode
matcher = validate_inclusion_of(:attr).in_array([true])
expect(matcher.description).to eq(
'validate that :attr is true'
'validate that :attr is true'
)
end
end
@ -696,7 +696,7 @@ describe Shoulda::Matchers::ActiveModel::ValidateInclusionOfMatcher, type: :mode
matcher = validate_inclusion_of(:attr).in_array([true, 'dog'])
expect(matcher.description).to eq(
'validate that :attr is either true or "dog"'
'validate that :attr is either true or "dog"'
)
end
end
@ -706,7 +706,7 @@ describe Shoulda::Matchers::ActiveModel::ValidateInclusionOfMatcher, type: :mode
matcher = validate_inclusion_of(:attr).in_array([true, 'dog', 'cat'])
expect(matcher.description).to eq(
'validate that :attr is either true, "dog", or "cat"'
'validate that :attr is either true, "dog", or "cat"'
)
end
end
@ -717,7 +717,7 @@ describe Shoulda::Matchers::ActiveModel::ValidateInclusionOfMatcher, type: :mode
matcher = validate_inclusion_of(:attr).in_range(1..10)
expect(matcher.description).to eq(
'validate that :attr lies inside the range 1..10'
'validate that :attr lies inside the range 1 to 10'
)
end
end

View File

@ -172,8 +172,8 @@ describe Shoulda::Matchers::ActiveModel::ValidateNumericalityOfMatcher, type: :m
message = <<-MESSAGE
Example did not properly validate that :attr looks like a number.
After setting :attr to "abcd", the matcher expected the Example to be
invalid, but it was valid instead.
After setting :attr to "abcd", the matcher expected the Example to
be invalid, but it was valid instead.
MESSAGE
expect(&assertion).to fail_with_message(message)
@ -200,8 +200,8 @@ Example did not properly validate that :attr looks like a number.
message = <<-MESSAGE
Example did not properly validate that :attr looks like a number, but
only if it is not nil.
In checking that Example allows :attr to be nil, after setting :attr
to nil, the matcher expected the Example to be valid, but it was
In checking that Example allows :attr to be nil, after setting :attr
to nil, the matcher expected the Example to be valid, but it was
invalid instead, producing these validation errors:
* attr: ["is not a number"]
@ -230,7 +230,7 @@ only if it is not nil.
message = <<-MESSAGE
Example did not properly validate that :attr looks like an integer.
After setting :attr to "0.1", the matcher expected the Example to be
After setting :attr to "0.1", the matcher expected the Example to be
invalid, but it was valid instead.
MESSAGE
@ -290,7 +290,7 @@ Example did not properly validate that :attr looks like an integer.
message = <<-MESSAGE
Example did not properly validate that :attr looks like an odd number.
After setting :attr to "2", the matcher expected the Example to be
After setting :attr to "2", the matcher expected the Example to be
invalid, but it was valid instead.
MESSAGE
@ -350,7 +350,7 @@ Example did not properly validate that :attr looks like an odd number.
message = <<-MESSAGE
Example did not properly validate that :attr looks like an even number.
After setting :attr to "1", the matcher expected the Example to be
After setting :attr to "1", the matcher expected the Example to be
invalid, but it was valid instead.
MESSAGE
@ -413,7 +413,7 @@ Example did not properly validate that :attr looks like an even number.
message = <<-MESSAGE
Example did not properly validate that :attr looks like a number less
than or equal to 18.
After setting :attr to "19", the matcher expected the Example to be
After setting :attr to "19", the matcher expected the Example to be
invalid, but it was valid instead.
MESSAGE
@ -476,7 +476,7 @@ than or equal to 18.
message = <<-MESSAGE
Example did not properly validate that :attr looks like a number less
than 18.
After setting :attr to "19", the matcher expected the Example to be
After setting :attr to "19", the matcher expected the Example to be
invalid, but it was valid instead.
MESSAGE
@ -537,7 +537,7 @@ than 18.
message = <<-MESSAGE
Example did not properly validate that :attr looks like a number equal
to 18.
After setting :attr to "19", the matcher expected the Example to be
After setting :attr to "19", the matcher expected the Example to be
invalid, but it was valid instead.
MESSAGE
@ -609,7 +609,7 @@ to 18.
message = <<-MESSAGE
Example did not properly validate that :attr looks like a number greater
than or equal to 18.
After setting :attr to "17", the matcher expected the Example to be
After setting :attr to "17", the matcher expected the Example to be
invalid, but it was valid instead.
MESSAGE
@ -678,7 +678,7 @@ than or equal to 18.
message = <<-MESSAGE
Example did not properly validate that :attr looks like a number greater
than 18.
After setting :attr to "18", the matcher expected the Example to be
After setting :attr to "18", the matcher expected the Example to be
invalid, but it was valid instead.
MESSAGE
@ -706,10 +706,10 @@ than 18.
message = <<-MESSAGE
Example did not properly validate that :attr looks like a number,
producing a custom validation error on failure.
After setting :attr to "abcd", the matcher expected the Example to be
invalid and to produce a validation error matching /wrong/ on :attr.
The record was indeed invalid, but it produced these validation errors
instead:
After setting :attr to "abcd", the matcher expected the Example to
be invalid and to produce a validation error matching /wrong/ on
:attr. The record was indeed invalid, but it produced these validation
errors instead:
* attr: ["custom"]
MESSAGE
@ -736,8 +736,8 @@ producing a custom validation error on failure.
message = <<-MESSAGE
Example did not properly validate that :attr looks like a number,
producing a custom validation error on failure.
After setting :attr to "abcd", the matcher expected the Example to be
invalid, but it was valid instead.
After setting :attr to "abcd", the matcher expected the Example to
be invalid, but it was valid instead.
MESSAGE
expect(&assertion).to fail_with_message(message)
@ -764,9 +764,9 @@ producing a custom validation error on failure.
message = <<-MESSAGE
Example did not properly validate that :attr looks like a number,
raising a validation exception on failure.
After setting :attr to "abcd", the matcher expected the Example to be
invalid and to raise a validation exception, but the record produced
validation errors instead.
After setting :attr to "abcd", the matcher expected the Example to
be invalid and to raise a validation exception, but the record
produced validation errors instead.
MESSAGE
expect(&assertion).to fail_with_message(message)
@ -798,8 +798,8 @@ raising a validation exception on failure.
message = <<-MESSAGE
Example did not properly validate that :attr looks like a number.
After setting :attr to "abcd", the matcher expected the Example to be
invalid, but it was valid instead.
After setting :attr to "abcd", the matcher expected the Example to
be invalid, but it was valid instead.
MESSAGE
expect(&assertion).to fail_with_message(message)
@ -837,7 +837,7 @@ Example did not properly validate that :attr looks like a number.
Example did not properly validate that :attr looks like an integer
greater than 18.
In checking that Example disallows :attr from being a decimal number,
after setting :attr to "0.1", the matcher expected the Example to be
after setting :attr to "0.1", the matcher expected the Example to be
invalid and to produce the validation error "must be an integer" on
:attr. The record was indeed invalid, but it produced these validation
errors instead:
@ -862,7 +862,7 @@ greater than 18.
Example did not properly validate that :attr looks like an integer
greater than 18.
In checking that Example disallows :attr from being a decimal number,
after setting :attr to "0.1", the matcher expected the Example to be
after setting :attr to "0.1", the matcher expected the Example to be
invalid and to produce the validation error "must be an integer" on
:attr. The record was indeed invalid, but it produced these validation
errors instead:
@ -890,8 +890,8 @@ greater than 18.
Example did not properly validate that :attr looks like an even number
greater than 18.
In checking that Example disallows :attr from being a number that is
not greater than 18, after setting :attr to "18", the matcher expected
the Example to be invalid, but it was valid instead.
not greater than 18, after setting :attr to "18", the matcher
expected the Example to be invalid, but it was valid instead.
MESSAGE
expect(&assertion).to fail_with_message(message)
@ -914,7 +914,7 @@ greater than 18.
Example did not properly validate that :attr looks like an even number
greater than 18.
In checking that Example disallows :attr from being an odd number,
after setting :attr to "1", the matcher expected the Example to be
after setting :attr to "1", the matcher expected the Example to be
invalid and to produce the validation error "must be even" on :attr.
The record was indeed invalid, but it produced these validation errors
instead:
@ -942,7 +942,7 @@ greater than 18.
Example did not properly validate that :attr looks like an odd number
less than or equal to 99.
In checking that Example disallows :attr from being a number that is
not less than or equal to 99, after setting :attr to "101", the
not less than or equal to 99, after setting :attr to "101", the
matcher expected the Example to be invalid, but it was valid instead.
MESSAGE
@ -968,8 +968,8 @@ less than or equal to 99.
Example did not properly validate that :attr looks like an integer
greater than 18 and less than 99.
In checking that Example disallows :attr from being a number that is
not greater than 18, after setting :attr to "18", the matcher expected
the Example to be invalid, but it was valid instead.
not greater than 18, after setting :attr to "18", the matcher
expected the Example to be invalid, but it was valid instead.
MESSAGE
expect(&assertion).to fail_with_message(message)
@ -995,10 +995,10 @@ greater than 18 and less than 99.
Example did not properly validate that :attr looks like an integer
greater than 18.
In checking that Example disallows :attr from being a number that is
not greater than 18, after setting :attr to "18", the matcher expected
the Example to be invalid and to produce the validation error "must be
greater than 18" on :attr. The record was indeed invalid, but it
produced these validation errors instead:
not greater than 18, after setting :attr to "18", the matcher
expected the Example to be invalid and to produce the validation error
"must be greater than 18" on :attr. The record was indeed invalid, but
it produced these validation errors instead:
* attr: ["must be greater than 19"]
MESSAGE
@ -1023,8 +1023,8 @@ greater than 18.
Example did not properly validate that :attr looks like an integer
greater than 18.
In checking that Example disallows :attr from being a number that is
not greater than 18, after setting :attr to "18", the matcher expected
the Example to be invalid, but it was valid instead.
not greater than 18, after setting :attr to "18", the matcher
expected the Example to be invalid, but it was valid instead.
MESSAGE
expect(&assertion).to fail_with_message(message)
@ -1048,10 +1048,10 @@ greater than 18.
Example did not properly validate that :attr looks like an even number
greater than 18.
In checking that Example disallows :attr from being a number that is
not greater than 18, after setting :attr to "18", the matcher expected
the Example to be invalid and to produce the validation error "must be
greater than 18" on :attr. The record was indeed invalid, but it
produced these validation errors instead:
not greater than 18, after setting :attr to "18", the matcher
expected the Example to be invalid and to produce the validation error
"must be greater than 18" on :attr. The record was indeed invalid, but
it produced these validation errors instead:
* attr: ["must be greater than 20"]
MESSAGE
@ -1076,8 +1076,8 @@ greater than 18.
Example did not properly validate that :attr looks like an even number
greater than 18.
In checking that Example disallows :attr from being a number that is
not greater than 18, after setting :attr to "18", the matcher expected
the Example to be invalid, but it was valid instead.
not greater than 18, after setting :attr to "18", the matcher
expected the Example to be invalid, but it was valid instead.
MESSAGE
expect(&assertion).to fail_with_message(message)
@ -1100,7 +1100,7 @@ greater than 18.
Example did not properly validate that :attr looks like an odd number
less than or equal to 99.
In checking that Example disallows :attr from being a number that is
not less than or equal to 99, after setting :attr to "101", the
not less than or equal to 99, after setting :attr to "101", the
matcher expected the Example to be invalid, but it was valid instead.
MESSAGE
@ -1124,7 +1124,7 @@ less than or equal to 99.
Example did not properly validate that :attr looks like an odd number
less than or equal to 99.
In checking that Example disallows :attr from being a number that is
not less than or equal to 99, after setting :attr to "101", the
not less than or equal to 99, after setting :attr to "101", the
matcher expected the Example to be invalid and to produce the
validation error "must be less than or equal to 99" on :attr. The
record was indeed invalid, but it produced these validation errors
@ -1156,10 +1156,10 @@ less than or equal to 99.
Example did not properly validate that :attr looks like an integer
greater than 18 and less than 99.
In checking that Example disallows :attr from being a number that is
not greater than 18, after setting :attr to "18", the matcher expected
the Example to be invalid and to produce the validation error "must be
greater than 18" on :attr. The record was indeed invalid, but it
produced these validation errors instead:
not greater than 18, after setting :attr to "18", the matcher
expected the Example to be invalid and to produce the validation error
"must be greater than 18" on :attr. The record was indeed invalid, but
it produced these validation errors instead:
* attr: ["must be greater than 19"]
MESSAGE
@ -1186,7 +1186,7 @@ greater than 18 and less than 99.
Example did not properly validate that :attr looks like an integer
greater than 18 and less than 99.
In checking that Example disallows :attr from being a number that is
not less than 99, after setting :attr to "100", the matcher expected
not less than 99, after setting :attr to "100", the matcher expected
the Example to be invalid and to produce the validation error "must be
less than 99" on :attr. The record was indeed invalid, but it produced
these validation errors instead:

View File

@ -21,7 +21,7 @@ describe Shoulda::Matchers::ActiveModel::ValidatePresenceOfMatcher, type: :model
message = <<-MESSAGE
Example did not properly validate that :attr cannot be empty/falsy.
After setting :attr to nil, the matcher expected the Example to be
After setting :attr to nil, the matcher expected the Example to be
invalid, but it was valid instead.
MESSAGE
@ -47,7 +47,7 @@ Example did not properly validate that :attr cannot be empty/falsy.
message = <<-MESSAGE
Example did not properly validate that :attr cannot be empty/falsy.
After setting :attr to nil, the matcher expected the Example to be
After setting :attr to nil, the matcher expected the Example to be
invalid, but it was valid instead.
MESSAGE
@ -105,7 +105,7 @@ Example did not properly validate that :attr cannot be empty/falsy.
message = <<-MESSAGE
Parent did not properly validate that :children cannot be empty/falsy.
After setting :children to [], the matcher expected the Parent to be
After setting :children to [], the matcher expected the Parent to be
invalid, but it was valid instead.
MESSAGE
@ -143,7 +143,7 @@ Parent did not properly validate that :children cannot be empty/falsy.
message = <<-MESSAGE
Example did not properly validate that :attr cannot be empty/falsy,
raising a validation exception on failure.
After setting :attr to nil, the matcher expected the Example to be
After setting :attr to nil, the matcher expected the Example to be
invalid and to raise a validation exception, but the record produced
validation errors instead.
MESSAGE

View File

@ -247,9 +247,9 @@ within the scope of :non_existent1 and :non_existent2.
message = <<-MESSAGE
Example did not properly validate that :attr is case-sensitively unique.
Given an existing Example whose :attr is "value", after making a new
Example and setting its :attr to "value" as well, the matcher expected
the new Example to be invalid, but it was valid instead.
Given an existing Example whose :attr is "value", after making a new
Example and setting its :attr to "value" as well, the matcher
expected the new Example to be invalid, but it was valid instead.
MESSAGE
expect(&assertion).to fail_with_message(message)
@ -347,9 +347,9 @@ within the scope of :other.
message = <<-MESSAGE
Example did not properly validate that :attr is case-sensitively unique.
After taking the given Example, setting its :attr to "an arbitrary
value", and saving it as the existing record, then making a new
Example and setting its :attr to "an arbitrary value" as well, the
After taking the given Example, setting its :attr to "an arbitrary
value", and saving it as the existing record, then making a new
Example and setting its :attr to "an arbitrary value" as well, the
matcher expected the new Example to be invalid and to produce the
validation error "has already been taken" on :attr. The record was
indeed invalid, but it produced these validation errors instead:
@ -377,9 +377,9 @@ Example did not properly validate that :attr is case-sensitively unique.
message = <<-MESSAGE
Example did not properly validate that :attr is case-sensitively unique,
producing a custom validation error on failure.
After taking the given Example, setting its :attr to "an arbitrary
value", and saving it as the existing record, then making a new
Example and setting its :attr to "an arbitrary value" as well, the
After taking the given Example, setting its :attr to "an arbitrary
value", and saving it as the existing record, then making a new
Example and setting its :attr to "an arbitrary value" as well, the
matcher expected the new Example to be invalid and to produce the
validation error "some message" on :attr. The record was indeed
invalid, but it produced these validation errors instead:
@ -419,11 +419,11 @@ producing a custom validation error on failure.
message = <<-MESSAGE
Example did not properly validate that :attr is case-sensitively unique,
producing a custom validation error on failure.
After taking the given Example, setting its :attr to "an arbitrary
value", and saving it as the existing record, then making a new
Example and setting its :attr to "an arbitrary value" as well, the
After taking the given Example, setting its :attr to "an arbitrary
value", and saving it as the existing record, then making a new
Example and setting its :attr to "an arbitrary value" as well, the
matcher expected the new Example to be invalid and to produce a
validation error matching /some message/ on :attr. The record was
validation error matching /some message/ on :attr. The record was
indeed invalid, but it produced these validation errors instead:
* attr: ["something else entirely"]
@ -672,11 +672,11 @@ within the scope of :scope1.
message = <<-MESSAGE
Example did not properly validate that :attr is case-insensitively
unique.
After taking the given Example, setting its :attr to "an arbitrary
value", and saving it as the existing record, then making a new
Example and setting its :attr to a different value, "AN ARBITRARY
VALUE", the matcher expected the new Example to be invalid, but it was
valid instead.
After taking the given Example, setting its :attr to "an arbitrary
value", and saving it as the existing record, then making a new
Example and setting its :attr to a different value, "AN ARBITRARY
VALUE", the matcher expected the new Example to be invalid, but it
was valid instead.
MESSAGE
expect(&assertion).to fail_with_message(message)
@ -698,10 +698,10 @@ unique.
message = <<-MESSAGE
Example did not properly validate that :attr is case-sensitively unique.
After taking the given Example, setting its :attr to "an arbitrary
value", and saving it as the existing record, then making a new
Example and setting its :attr to a different value, "AN ARBITRARY
VALUE", the matcher expected the new Example to be valid, but it was
After taking the given Example, setting its :attr to "an arbitrary
value", and saving it as the existing record, then making a new
Example and setting its :attr to a different value, "AN ARBITRARY
VALUE", the matcher expected the new Example to be valid, but it was
invalid instead, producing these validation errors:
* attr: ["has already been taken"]
@ -775,9 +775,9 @@ Example did not properly validate that :attr is case-sensitively unique.
message = <<-MESSAGE
Example did not properly validate that :attr is case-sensitively unique,
but only if it is not nil.
After taking the given Example, setting its :attr to nil, and saving
After taking the given Example, setting its :attr to nil, and saving
it as the existing record, then making a new Example and setting its
:attr to nil as well, the matcher expected the new Example to be
:attr to nil as well, the matcher expected the new Example to be
valid, but it was invalid instead, producing these validation errors:
* attr: ["has already been taken"]
@ -799,10 +799,10 @@ but only if it is not nil.
message = <<-MESSAGE
Example did not properly validate that :attr is case-sensitively unique,
but only if it is not nil.
Given an existing Example whose :attr is nil, after making a new
Example and setting its :attr to nil as well, the matcher expected the
new Example to be valid, but it was invalid instead, producing these
validation errors:
Given an existing Example whose :attr is nil, after making a new
Example and setting its :attr to nil as well, the matcher expected
the new Example to be valid, but it was invalid instead, producing
these validation errors:
* attr: ["has already been taken"]
MESSAGE
@ -904,10 +904,10 @@ but only if it is not nil.
message = <<-MESSAGE
Example did not properly validate that :attr is case-sensitively unique,
but only if it is not blank.
After taking the given Example, setting its :attr to "", and saving it
as the existing record, then making a new Example and setting its
:attr to "" as well, the matcher expected the new Example to be valid,
but it was invalid instead, producing these validation errors:
After taking the given Example, setting its :attr to "", and saving
it as the existing record, then making a new Example and setting its
:attr to "" as well, the matcher expected the new Example to be
valid, but it was invalid instead, producing these validation errors:
* attr: ["has already been taken"]
MESSAGE
@ -928,10 +928,10 @@ but only if it is not blank.
message = <<-MESSAGE
Example did not properly validate that :attr is case-sensitively unique,
but only if it is not blank.
Given an existing Example, after setting its :attr to "", then making
a new Example and setting its :attr to "" as well, the matcher
expected the new Example to be valid, but it was invalid instead,
producing these validation errors:
Given an existing Example, after setting its :attr to "", then
making a new Example and setting its :attr to "" as well, the
matcher expected the new Example to be valid, but it was invalid
instead, producing these validation errors:
* attr: ["has already been taken"]
MESSAGE
@ -954,10 +954,10 @@ but only if it is not blank.
message = <<-MESSAGE
Example did not properly validate that :attr is case-sensitively unique,
but only if it is not blank.
After taking the given Example, setting its :attr to "", and saving it
as the existing record, then making a new Example and setting its
:attr to "" as well, the matcher expected the new Example to be valid,
but it was invalid instead, producing these validation errors:
After taking the given Example, setting its :attr to "", and saving
it as the existing record, then making a new Example and setting its
:attr to "" as well, the matcher expected the new Example to be
valid, but it was invalid instead, producing these validation errors:
* attr: ["has already been taken"]
MESSAGE
@ -980,10 +980,10 @@ but only if it is not blank.
message = <<-MESSAGE
Example did not properly validate that :attr is case-sensitively unique,
but only if it is not blank.
Given an existing Example whose :attr is "", after making a new
Example and setting its :attr to "" as well, the matcher expected the
new Example to be valid, but it was invalid instead, producing these
validation errors:
Given an existing Example whose :attr is "", after making a new
Example and setting its :attr to "" as well, the matcher expected
the new Example to be valid, but it was invalid instead, producing
these validation errors:
* attr: ["has already been taken"]
MESSAGE