Skip to content

Improve error message when accessing fixtures from an unsupported context #1433

Closed
@cupakromer

Description

@cupakromer

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions