There is a great article about unit testing in general, which I think you will find useful - Getting started with JavaScript unit testing. Although pretty old, it covers some pretty important points when starting unit testing. Also, Eric Elliott's wonderful article 5 Questions Every Unit Test Must Answer will be at help too.
Mocha and Karma may look like a dark voodoo at first but actually are not that hard to understand. I've written a post about different unit test libraries some time ago, you can take a look.
Mocha is a testing library, that allows running synchronous and asynchronous tests. Nothing more, nothing less. It doesn't come with assertion library, which makes it a flexible solution, allowing you to use whatever you like (Chai, should or any other assertion library). I won't go into any deeper details, but I can explain you more if you like.
Karma, on the other hand, is a test runner and provides helpful tools that make it easier to you to call your Mocha tests whilst you are writing code. Karma spawns a web server that executes source code against test code for each of the browsers connected.
Most of the time, you want to test your code in a specific environment, that being the browser, which can be a tedious and time-consuming task if you do it manually, so Karma automates that. There are multiple available browsers which you can use with Karma.
Here are some more resources about the topic: