diff options
author | Aaron Weiner <aweiner@mdsol.com> | 2013-02-27 18:17:29 -0500 |
---|---|---|
committer | Aaron Weiner <aweiner@mdsol.com> | 2013-03-03 12:36:51 -0500 |
commit | 53f18f2c5475809f7f6c5576aba89d6340a57c06 (patch) | |
tree | d1ae1d758acc64933ac592866b5b94745ded553b /activerecord/test | |
parent | 48c21e3255fa2f4b1875ca8616a5ad7706a7a4cb (diff) | |
download | rails-53f18f2c5475809f7f6c5576aba89d6340a57c06.tar.gz rails-53f18f2c5475809f7f6c5576aba89d6340a57c06.tar.bz2 rails-53f18f2c5475809f7f6c5576aba89d6340a57c06.zip |
More helpful error message when instantiating an abstract class
Calling a literal ActiveRecord::Base.new raises NoMethodError,
since it ends up calling Class.abstract_class? which does not exist.
Similarly, instantiating an actual abstract class hits the database,
when conventionally it should immediately throw NotImplementedError.
ActiveRecord::Base can't be made abstract without breaking many,
many things, so check for it separately.
Diffstat (limited to 'activerecord/test')
-rw-r--r-- | activerecord/test/cases/base_test.rb | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb index af1845c937..8e6e462404 100644 --- a/activerecord/test/cases/base_test.rb +++ b/activerecord/test/cases/base_test.rb @@ -307,6 +307,20 @@ class BasicsTest < ActiveRecord::TestCase assert_equal("last_read", ex.errors[0].attribute) end + def test_initialize_abstract_class + e = assert_raises(NotImplementedError) do + FirstAbstractClass.new + end + assert_equal("FirstAbstractClass is an abstract class and can not be instantiated.", e.message) + end + + def test_initialize_base + e = assert_raises(NotImplementedError) do + ActiveRecord::Base.new + end + assert_equal("ActiveRecord::Base is an abstract class and can not be instantiated.", e.message) + end + def test_create_after_initialize_without_block cb = CustomBulb.create(:name => 'Dude') assert_equal('Dude', cb.name) |