Originally published at recca0120.github.io
All tests pass, but the terminal is full of red console.error output. This is common and easy to ignore — the tests passed, after all. But those errors don't appear out of nowhere. Something went wrong; nobody just noticed.
vitest-fail-on-console does one thing: if console.error or console.warn appears during a test, that test fails. It forces you to acknowledge these messages instead of letting them drown in noise.
Why console.error in Tests Is a Code Smell
Vitest doesn't care about console output by default. You can console.error all day and tests still pass.
The problem is that console.error usually means something. It might be:
A React prop type warning
An async error that was caught but not properly handled
A third-party package telling you you're using it wrong
An error handler in your own code getting triggered
When these appear in tests, the test is running in a slightly broken state — it just didn't throw.…