Warn on context fixture helper #1208
Closed
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.
Fixtures are controlled by the underlying
ActiveRecord::TestFixtures
code. Which sets up fixtures before each example. While the database may have fixture data in it before this point, that data will be reset once the test fixture code runs.When the
fixtures
message is sent in an example group, or global fixtures are defined, the Active Record test fixtures register the accessors in an anonymous module. That module is included in the example group's ancestors.Which means the accessor helpers are available in any example group instance; thus they are available in
before(:context)
andafter(:context)
. However, the internal fixture setup and cache has not been performed yet. Attempting to call a fixture helper prior to the fixtures being setup, raises an undefined method onNilClass
error.This update shims a module into the fixture registration process. The module creates mirrored accessor helpers which raise a helpful error when called. In order to ensure these are only available in context hooks, the private RSpec APIs (:grimacing:), are redeclared in order to extend the provided example group instance with the accessor preventing module.
Resolve #1201
TODO: