avajs / ava

Node.js test runner that lets you develop with confidence 🚀
MIT License
20.74k stars 1.41k forks source link

Make watch mode wait for the file system to be idle, and have that be configurable #2715

Open novemberborn opened 3 years ago

novemberborn commented 3 years ago

Based on discussion in https://github.com/avajs/ava/discussions/2702, projects with more complicated build setups may want to configure how long watch mode waits for the filesystem to become idle, lest it runs tests prematurely.

~We currently wait at least 100ms, but debounce for another 10ms after changes. ~Instead let's introduce a watchFsIdle option that defaults to 500ms. This should be configurable through config files only, not CLI flags. We should take time strings, like the timeout option.

Other name suggestions welcome.

The watcher should wait the duration of idle time after the last change. If another change is detected, it should again wait the duration of the idle time.

~This likely impacts the current watcher tests which are rather brittle. We also have some integration tests that may be affected.~

capttrousers commented 2 years ago

RE new watch mode config settings, I think it'd make sense to add a new watchModeOptions top level object in the ava config object, and begin moving all existing and new watch mode options there. Watch mode seems to be a pretty specific mode for running the test runner, so having all the options for this mode in a single flat object is probably a good future proof place.

For example, if watch mode event hooks were added, to support things like clearing the screen between reruns, similar to my request here: https://github.com/avajs/ava/issues/1623 then those could be defined in the top level watchModeOptions as well

novemberborn commented 1 year ago

Watch mode has changed a lot in https://github.com/avajs/ava/pull/3218, it'll be easier to implement this and write tests, plus there's a watchMode configuration object.