Tests using AssertOffense should Fail with a usable message if the relevant cop is not defined #314
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.
Including the
AssertOffense
module currently fails with a cryptic message if the cop can't be found. This PR introduces an explicit failure with a useful message, replacing theNoMethodError
that is currently raised in this situation.Before
After
My first implementation simply changed
AssertOffense#setup
to fail if the cop wasn't found, but that broke four tests in the test suite. Given that the advice given is to requiresupport.rb
, which includesAssertOffense
on every instance ofMinitest::Test
, I realized that implementation was likely to break many gem-consumer repositories in this same way.The second implementation refactors the initialization of a Cop to be lazy, so that the error is only raised when the cop is attempted to be accessed. This has the downside of
@cop
beingnil
until#cop
is called, but these failures will only happen in tests where@cop
is accessed directly. I believe these failures, if experienced by consumers of the gem, will be easier to resolve than the errors likely to have been introduced by my first implementation.Before submitting the PR make sure the following are checked:
[Fix #issue-number]
(if the related issue exists).master
(if not - rebase it).bundle exec rake default
. It executes all tests and runs RuboCop on its own code.{change_type}_{change_description}.md
if the new code introduces user-observable changes. See changelog entry format for details.