I am trying to create an external module where I can set up a preset for running cucumber test.
This external module has @cucumber/cucumber
as a peerDependency, so it doesn't install it directly. Therefore, this dependency allows the preset to set the World
constructor as well as add Given
, When
, Then
to the global scope, so we can have cleaner step definitions.
It all works when I have cucumber-js option flags linking to a local file as cucumber-js --require ./test-preset.setup.js
, however, once moving to the same preset over to an external module and requiring it as cucumber-js --require-module cucumber-preset-foo
, the process ends with the same error presented at #1326.
I could spot something on the cli source code where supportCodeLibraryBuilder.reset
is being called right after these external modules are required through supportCodeRequiredModules
, which could make inviable interacting with the running cucumber instance once its data is being reset right after.
Perhaps there's a specific reason for this design, however I would like to check if there would be any implication calling the reset method before requiring the modules, so we can make use of those portable presets? I can see this sort of feature benefiting some users who would like to use presets for specific development environments such as react e2e, for example.
node: v15.8.0
@cucumber/cucumber: 7.1.0
os: Linux
Hi @zanona
Your module looks interesting
Your investigation on that issue too
As you already have a good idea of what is happening and how it may be fixed, do you think you could open a PR for that, and to support the discussion around that?
Hmm, I don't see any issue with moving the reset to just before require-module. It being after was more a product of what require-module was used for in the past which had the primary use case of setting up transpilers (typescript / babel)
Sounds great guys.
I can surely prepare a PR, perhaps we can scope it as a feature rather than a bug, so I can prepare tests scoped to the user being able to create a custom preset and making sure the test runner understands it?
Alternatively, we could simply swap those two lines and watch for failed tests?
How would you prefer to go about it?
Regarding cucumber, this remain a bug as there is an unexpected error while trying to load a module in a regular way, that should actually work.
But you still can scope your PR as an enhancement with a scoped test as you described - I actually like the idea - which would have the benefit to fix that issue as well. What do you think?
Regarding the possibility to swap the two lines, that could be a first good starting point IMO :)