This is slightly contentious, because there are different ways of approaching testing, and in some (many?) cases TDD doesn’t work well (building UIs is often one case). TDD is also imo difficult if you don’t understand the problem that you are solving very well to start off with, as it is difficult to the write tests. It’s also quasi-religious, make of that as you will.
For JS specifically, make sure you know how to use and run the testing framework (you mention Mocha; Jest is another big one, and comes batteries-included. And Tape is very good by virtue of its simplicity). Once you’ve got that down pat, it’s more a case of concept rather than anything JS-specific. You need to understand how the program you’re trying to write/test works from a JS perspective, but most TDD concepts are language-agnostic.
There are several very good books. Note that none of these use JS as the teaching language, but that should not matter a huge amount because they are designed to explain how to think about writing good tests for programs in general. They are not free but I’m sure you can hunt around for them:
Test-Driven Development By Example by Kent Beck
The Art of unit testing by Roy Osherove
xUnit Test Patterns by Gerard Mezaros
These are just generally about writing software, and are both imo important books:
Code Complete
The Pragmatic Programmer
Here’s a list of TDD resources
The programming site Exercism is based on working through a set of katas (small self-contained problems, like FCC’s algorithm challenges) using TDD.
Another list: awesome-tdd