🐛 Clean up resources when the AppFixture fails to initialize - #170
Merged
Conversation
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.
📝 Description of the PR
When the initialization of an
AppFixturefailed, the fixture was left in an inconsistent state: it was already considered active, although the application had not been created yet. Any subsequent lifecycle call passed its state check and then failed on the missing application, replacing the original error with aTypeError. Becausedeletethrew before reaching the fixtures, none of them were ever cleaned up, and the resources they had allocated (temporary databases, subscriptions, clients) stayed alive past the end of the test file.AppFixture.initnow releases everything it has allocated when it fails: the application is closed and the fixtures that did initialize are deleted, before the original error is rethrown. The fixture becomes active only once the application is fully initialized, and it transitions to a failed state otherwise, in whichclearanddeleteare no-ops. All fixtures are also initialized to completion even when one of them fails, so that a slower fixture cannot allocate resources after the cleanup has run.📋 Check list