-
-
Notifications
You must be signed in to change notification settings - Fork 682
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
form.parse's Promise never resolves in tests #959
Comments
This is happening to me too, not even in test environment. 3.5.1. The promise just never resolves |
If you have body-parser package just remove or comment it. Hope it will resolve |
(reminder for me: try req.on('data') earlier) are you testing formidable, or a project using formidable ? |
I tried commenting out busboy and busboy-body-parser and the parsing completed successfully. |
I had been banging my head against the wall for two days.... Thank you |
@george-i @egargale yeah, that's a known thing that things don't work well if someone else is interacting with the body too. Formidable can be simplified A LOT, but the problem to move directly the newest stuff is that people are relying on old versions, there's still people on v1.. I had the code ready for over a year, a dream of mine for v4-5, but yeah ;d |
I encounter the same issue. Is there any solution available to resolve the problem? |
This is addressing a critical error, see GHSA-8cp3-66vr-3r4c That was not trivial as I bumped into this bug node-formidable/formidable#959 which led me to move form parsing to the middleware stage
I migrated an Express app using body-parser and formidable |
Support plan
Context
18.18.2
next
v3.5.1
node-mocks-https
,form-data
Note this issue appears to only be present in tests as it is dependent on how promises get queued, but it could lead to a bug in live code.
What are you trying to achieve or the steps to reproduce?
A (somewhat) minimal reproducible test.
What was the result you got?
The test times out at 5000ms because the
await form.parse(req)
never resolves.What result did you expect?
The test passes.
Cause
The issue is caused as the callback handlers are set after an await of a promise.
formidable/src/Formidable.js
Line 232 in 1699ec6
This means the function returns, then data is sent which formidable is not listening for, then the
await
withinparse
is resolved and the handlers are set, but the events have already been missed, so the handlers just do nothing until Jest stops the test.Workaround
It's possible to call
req.send
in a promise with a slight delay, e.g.Breaking change
This is also a breaking change as it seems to have been introduced since
v3.2.4
. While the Promise style ofparse
didn't exist in that version, this bug also affects the callback style in the same manor.The text was updated successfully, but these errors were encountered: