Validations only don't work in tests!


#1

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(!@country.valid?, "'#{@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.

  1. Failure:
    test_invalid_abbrevation_length(CountryTest)
    [test/unit/country_test.rb:73:in test_invalid_abbrevation_length' test/unit/country_test.rb:71:ineach’
    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.

  2. 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:ineach’
    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