Hi all
I have written the following unit tests:
def test_invalid_characters_in_abbrevation
@country = Country.new(valid_country_attrs)
assert @country.valid?
%w{ a1 11 09 äü '(a' 'd&' }.each do |abbr|
@country.abbrevation = abbr
assert([email protected]?, "'#{@country.abbrevation}' should not be
a valid abbrevation because of invalid characters")
assert_equal(@country.errors.on(:abbrevation),
Country.error_messages[:not_allowed_chars_in_abbrevation])
end
end
def test_invalid_abbrevation_length
@country = Country.new(valid_country_attrs)
assert @country.valid?
%w{ a b x D G X aAa BBb CCC DFwFe }.each do |abbr|
@country.abbrevation = abbr
assert(!@country.valid?, “’#{@country.abbrevation}’ should not be
a valid abbrevation because of invalid length”)
assert_equal(@country.errors.on(:abbrevation),
Country.error_messages[:abbrevation_has_wrong_length])
end
end
My Country model looks like the following:
class Country < ActiveRecord::Base
validates_presence_of :abbrevation
validates_presence_of :name
def self.error_messages
{ :not_allowed_chars_in_abbrevation => ‘must contain only A-Z
(uppercase)’,
:abbrevation_has_wrong_length => ‘must be exactly 2 chars long’}
end
def before_validation
abbrevation.upcase! # Make abbrevation upper case!
end
def after_validation
if !@errors.on(:abbrevation)
@errors.add(:abbrevation,
self.class.error_messages[:not_allowed_chars_in_abbrevation]) unless
abbrevation =~ /^[A-Z]+$/
end
if !@errors.on(:abbrevation)
@errors.add(:abbrevation,
self.class.error_messages[:abbrevation_has_wrong_length]) unless
abbrevation.length == 2
end
end
end
Strangely these tests work perfectly when manually testing them via web
browser. But in my unit tests they abort!
chraftbuech:~/Webwork/pgbookings josh$ ruby test/unit/country_test.rb
Loaded suite test/unit/country_test
Started
.FF…
Finished in 0.13866 seconds.
-
Failure:
test_invalid_abbrevation_length(CountryTest)
[test/unit/country_test.rb:73:intest_invalid_abbrevation_length' test/unit/country_test.rb:71:in
each’
test/unit/country_test.rb:71:in `test_invalid_abbrevation_length’]:
‘A’ should not be a valid abbrevation because of invalid length.
is not true. -
Failure:
test_invalid_characters_in_abbrevation(CountryTest)
[test/unit/country_test.rb:63:in
test_invalid_characters_in_abbrevation' test/unit/country_test.rb:61:in
each’
test/unit/country_test.rb:61:in
`test_invalid_characters_in_abbrevation’]:
‘A1’ should not be a valid abbrevation because of invalid characters.
is not true.
6 tests, 32 assertions, 2 failures, 0 errors
I don’t have any clue why! Anyone can point me into the right direction?
Thanks a lot
Josh