I keep wondering why people won't test with a real database. Right, you need to create it and clean it up before or after every test, but that's a lot cheaper than having to stub everything related to the db.
Also spinning one up locally is easy thanks to Docker.