Problem only happened when running a test file separately (it worked by accident when running all tests together as usual).
Problem was that the ChildProcess object in Worker (the this.#child member) remains open for a bit until it emits 'close' event, which is emitted after 'exit' event or after 'error' event.
But we didn't await for that event at all since out worker.close() method is sync and we do not care of what is happening in the subprocess after calling it. And this is good. However it's bad for tests if we use --detectOpenHandles in Jest command.
Here we have added a new 'subprocessclose' event in Worker which is emitted when the worker subprocess has closed. It may be (and it will be) emitted AFTER calling worker.close() but not immediately after it.
This event is basically useful for scenarios like testing where we want to verify that nothing remains running/open when a test is finished.
Also added a worker.subprocessClosed getter.
Removed an ugly setTimeout in Channel::close() method. If the app wants to get the very latest notifications/logs from worker when closing it, use the above event to wait for final closure.
Bonus Tracks
Be consistent in command line arguments and always use --option-foo bar instead of --option-foo=bar.
Make tasks.py and Makefile more resistant to paths with spaces.
Fixes #1306
Details
ChildProcess
object inWorker
(thethis.#child
member) remains open for a bit until it emits 'close' event, which is emitted after 'exit' event or after 'error' event.worker.close()
method is sync and we do not care of what is happening in the subprocess after calling it. And this is good. However it's bad for tests if we use--detectOpenHandles
in Jest command.Worker
which is emitted when the worker subprocess has closed. It may be (and it will be) emitted AFTER callingworker.close()
but not immediately after it.worker.subprocessClosed
getter.setTimeout
inChannel::close()
method. If the app wants to get the very latest notifications/logs from worker when closing it, use the above event to wait for final closure.Bonus Tracks
--option-foo bar
instead of--option-foo=bar
.tasks.py
andMakefile
more resistant to paths with spaces.