Description
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)
and after(: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 on NilClass
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.