I really enjoy TDD when I get into the rhythm, but I've found that setting up the infrastructure can be a real barrier, especially for a language/framework that I've never worked in.
However, I have written code without it and I frequently find that when I do so, I very quickly regret it. Either I get confused about what precisely I'm doing or I end up having to write tests after-the-fact and it is much harder. The barrier is worth overcoming. How?
1) Find good tutorials and work through them.
A lot of people say that the best way to learn something is just to dive in and build something. I disagree, at least when that thing is new to you. I find it is much better to find a tutorial that guides you through building something the first time. It is worth asking around on twitter or on a relevant subreddit for this. Then, don't just read--actually work through at least a good chunk of it. Once you've done that you have some code you can look back on when you are looking for the basics of how to set up your tests.
2) Don't worry about mocking as much in the beginning.
The purpose of mocking is to avoid having the test take a long time to run due to the machine spending a bunch of time working on other things. Given that you are waiting on the machine when you run your test, this is actually meaningful. So, mocking intelligently can be a win if you it saves you that time. However, it also has the downsides that it can take a lot longer to write the test and it can make your test more brittle. For that reason I find it often makes sense not to mock and just write a bunch of tests that do in fact (for example) hit the database. This is especially a good idea with a new language where trying to use 7 new libraries at once (cough javascript cough cough) is going to lead to confusion.
Also note that TDD doesn't really work if the code is already written because doing fine-grained tests for code that is already written is really hard. It is better to do interface/API tests and put off unit testing until you are willing to refactor the code.
Note also that there are some tasks where your tests are going to be more like infrastructure tests and your changes won't be quite as granular as TDD doctrine dictates. That is something you have to accept when everything is coming together, because that is the realm of integration tests.
There is a tutorial I've written which aims to teach this alongside teaching configuration management, though it is my first tutorial. I would love critiques of the pedagogy and example code. https://amfarrell.com/saltstack-from-scratch/