ava icon indicating copy to clipboard operation
ava copied to clipboard

Set `test.meta.debugMode = true` when timeout has been disabled for debugging

Open bitjson opened this issue 2 years ago • 3 comments

I'm using AVA to test a program that interacts with a Postgres database and has timing-related tests (code here).

I'm analyzing the stdout from a child process to verify it's producing the expected results. Results can sometimes come in unexpected orders, so I need close control over how long to wait for each, and timers run in parallel, so t.timeout() isn't really a good fit.

It's easy enough to manage the timers myself, but one inconvenience is that I need to manually disable them when debugging the tests. (AVA logs âš  The timeout option has been disabled to help with debugging. which is perfect, but my timers still interfere with debugging.)

Also, my tests can't inspect whether or not the inspector is active for some reason (probably something about them being in separate processes?) so I can't use the same code as AVA here:

https://github.com/avajs/ava/blob/639b9050a6860f83861ba00e27099f3bec7915bf/lib/cli.js#L122-L133

It would be very helpful if AVA somehow exposed this boolean to my tests so I can have them deliberately behave differently in debug mode. Maybe by adding it to test.meta? E.g.:

if(test.meta.debugMode) {
  // code to run if AVA is in debugging mode
}

bitjson avatar Jan 13 '23 20:01 bitjson

I like it!

@bitjson are you game to implement this? Let me know if you need some pointers.

novemberborn avatar Jan 15 '23 17:01 novemberborn

@novemberborn I'd be happy to try! Though I'll need help with testing the feature.

I tried hacking something together initially, but I probably need a better understanding of the codebase. Could you point me to the location where test.meta is actually set?

bitjson avatar Jan 19 '23 22:01 bitjson

Hi @bitjson, I think the meta object is defined here:

https://github.com/avajs/ava/blob/c74934853db1d387c46ed1f953970c777feed6a0/lib/runner.js#L71-L77

It's then made available through the CJS and ESM entrypoints and some indirection.

Runner is instantiated here:

https://github.com/avajs/ava/blob/c74934853db1d387c46ed1f953970c777feed6a0/lib/worker/base.js#L78

The options there should have the debug flag, see further down:

https://github.com/avajs/ava/blob/c74934853db1d387c46ed1f953970c777feed6a0/lib/worker/base.js#L186

novemberborn avatar Jan 29 '23 19:01 novemberborn