aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test
diff options
context:
space:
mode:
authorAaron Weiner <aweiner@mdsol.com>2013-02-27 18:17:29 -0500
committerAaron Weiner <aweiner@mdsol.com>2013-03-03 12:36:51 -0500
commit53f18f2c5475809f7f6c5576aba89d6340a57c06 (patch)
treed1ae1d758acc64933ac592866b5b94745ded553b /activerecord/test
parent48c21e3255fa2f4b1875ca8616a5ad7706a7a4cb (diff)
downloadrails-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.rb14
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)