fix: allow hooks to run only once per interaction #1243
Merged
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.
Current behaviour will run the
beforeEach
andafterEach
hooks multiple times if there are several provider states defined in an interaction. This is due to the way the hook are run on every call to/_pactSetup
via the proxy.This change will ensure each of those hooks is run only once per interaction, regardless of how many provider states are defined in that interaction.
Our primary use case in applying this fix was to be able to support multiple
given()
statements in our consumer tests without having them each trigger thebeforeEach
hook (which we want to use for resetting state), egWhich produces the following in the Pact JSON:
Which drives multiple calls to the
/_pactSetup
endpoint during Provider verification, one for each of theproviderStates
, and thus multiple calls tobeforeEach
.This fix ensures the hooks are only run on the first
setup
call and on the lastteardown
call.