in JS (with Jest/Vitest) it is far too easy to call mock()...
in JS (with Jest/Vitest) it is far too easy to call mock()...
Your course should mention these techniques! Without them tests are unsound!
We do some dependency injection of our framework-level service objects like ServerApiService or RouterService or RecordCacheService (usually with a subclass of the actual implementation) but it hardly needs to be ubiquitous or typical for product developer code.
It's a testing technique used particularly in legacy projects called characterization tests. If you are faced with covering with tests a component you didn't wrote and you don't want to introduce a regression when refactoring it, you just mock existing function calls to assert observable behavior.
In compiled languages such as C++ this is even done with link time stubs.
Calling it code smell conveys the idea you are inexperienced and lack any experience managing test coverage.