Forum: Ruby on Rails Validations only don't work in tests!

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Joshua M. (Guest)
on 2007-03-24 15:06
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:in `each'
     test/unit/country_test.rb:71:in `test_invalid_abbrevation_length']:
'A' should not be a valid abbrevation because of invalid length.
<false> 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: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.
<false> 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
This topic is locked and can not be replied to.