More helpful error message when instantiating an abstract class#9474
Merged
Conversation
Member
|
can you write two test cases to verify that AR::Base cant be instantiated and that an abstract class can't be instantiated? Also we would need a CHANGELOG entry explaining the change. |
Member
Member
There was a problem hiding this comment.
just a nitpick but it would be nice to put the constant name inside .
Member
|
added a few minor comments. |
Contributor
Author
|
Thanks, comments addressed in HonoreDB@f128e79. |
Member
There was a problem hiding this comment.
you should assign the exception to check the message:
e = assert_raises(XX) {}
assert_equals "<expected>", e.message
Member
|
the PR does no longer cleanly apply to master. Can you push a rebased version? |
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.
Contributor
Author
|
Rebased, tests now check the error message in addition to the type. |
Member
|
@HonoreDB amazing! thanks for the fast update. 💛 @carlosantoniodasilva @rafaelfranca can you take a final look? |
rafaelfranca
added a commit
that referenced
this pull request
Mar 7, 2013
More helpful error message when instantiating an abstract class Conflicts: activerecord/CHANGELOG.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Calling a literal
ActiveRecord::Base.newraisesNoMethodError,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::Basecan't be made abstract without breaking many,many things, so check for it separately.