Norvig's lispy is a great reference implementation of a tiny Lisp in Python. There is also a bigger one. We haven't covered all the features of Lispy yet, but if you want to get a head start you can look through those implementations.
When writing an interpreter it's helpful if you have a reference implementation. I used Racket as my reference implementation to test little snippets of code to make sure I wasn't screwing up the meaning of Scheme programs.
For more description of how Scheme works and how to write Scheme interpreters, check out the Structure and Interpretation of Computer Programs by Abelson, Sussman, and Sussman. The full text is online!
We're using Mocha. Read through the documentation to find out about all the fun reporting modes and testing styles.
We're also using Chai. It supports several different assertion styles, give them a try and see if you like them.
You can also browse the assert documentation in Chai to see what functions are available.
Test-driven development is a software development process that you can read up about. The basic idea is to write automated failing test cases first, then write the code to make the tests pass.
Like everyone else in the known universe we're using jQuery to make things happen on webpages. If you haven't worked with jQuery before, take a look through the documentation and tutorials to figure out how things work.
I'm a big fan of CodeMirror, a text editor for the browser. You can customize it in lots of ways to look pretty and behave nicely. And you just have to love the logo.