Let’s Code: Test-Driven JavaScript

James Shore presents a fascinating screencast
on rigorous, professional JavaScript development

Watch Now

Latest Live Episodes

  1. Things Runnin’ Through Your Head

    Mon, 6 July

    Our new design is ready to deploy! We take it slow and careful: first we integrate, then we deploy to a staging server. That reveals a minor Heroku issue, so we take care of that, then deploy to production. With that, we’re done! Our new design is live at weewikipaint.com.

  2. Somethin’ Weird and It Don’t Look Good

    Wed, 1 July

    Our cache-busting code is all done except for cleaning up after itself. We update our build to delete intermediate files, then modify the Hashcat runner to fail when an error occurs and hide Hashcat’s verbose output when it succeeds.

  3. I Ain’t Afraid of No Ghost

    Mon, 29 June

    Our cache-busting code broke our webfont test. When Hashcat runs, it minifies our CSS, and when it does, it strips off the quotes around the font names. Our test assumes that they’re present. We make some nice improvements to our font testing logic and our build is back to 100% green.

Latest Specials

  1. Shell Scripting

    Fri, 3 July

    Most of our build is programmed in JavaScript, but there’s a few tedious launch steps we have to remember to do manually. Shell scripting—automating the command prompt—will allow us to automate those steps too. We make it work for Mac/Unix and Windows, giving us a true one-button build.

  2. Dependency Management

    Fri, 26 June

    To make our automated build reproducible by other members of the team, we need a way of sharing dependencies with everybody on the team. There’s two strategies for this: downloading dependencies when needed or checking them into version control. We discuss the trade-offs, choose the “check it in” strategy, and make it work for our build tool.

  3. The Automated Build

    Fri, 19 June

    All software has a series of steps needed to make it run and ensure that everything works. For some teams, it’s a manual checklist. A better approach is to turn that checklist into a program: the automated build. We establish that good practice from the beginning by creating a bare-bones automated build and installing a helpful build tool.

An in-depth screencast about
Test-Driven JavaScript

You've taught me a lot this past year and have
been better than a teacher, a true mentor.
Jason Weden
I’m completely new to TDD and this is by far
the most comprehensive TDD for JS... your videos are
a breath of fresh air!
Adam Brodzinski
This is a gold mine... This will help a lot in my day job.
Timothy Myers
Love what you're doing. It's helped out our
team tremendously here at Sevenly.
Scott Corgan
I’m delighted with LCJ. It’s interesting and informative, and the
candid way you think aloud makes it personal and engaging.
You’ve done a terrific job.
Crispin Bennett

JavaScript Needs Test-Driven Development

If you’ve programmed in JavaScript, you know that it’s an… interesting… language. Don’t get me wrong: I love JavaScript. I love its first-class functions, the intensive VM competition among browser makers, and how it makes the web come alive. It definitely has its good parts.

It also has some not-so-good parts. Whether it’s browser DOMs, automatic semicolon insertion, or an object model with a split personality, everyone’s had some part of JavaScript bite them in the butt at some point. That’s why using test-driven development is so important.

What is Test-Driven Development?

Test-driven development (TDD) is a technique for ensuring that your code does what you think it does. It’s particularly relevant for JavaScript, with its cross-browser incompatibilities and hidden gotchas. With TDD, you express your intentions twice: once as a test, and once as production code. If the two approaches don’t match, your tests fail, and you’ve caught a bug.

TDD is a great way of catching the majority of programming errors. It’s not perfect, of course—in particular, it can’t tell you when your assumptions are wrong—but it’s very good at catching the kinds of bugs JavaScript is prone to.

Who am I?

I’m James Shore. I’ve been building applications using test-driven development and other Agile techniques for over 15 years. I’m a recipient of the Agile Alliance’s Gordon Pask Award for Contributions to Agile Practice and I wrote a book called The Art of Agile Development.

What You Get

This screencast series focuses on rigorous, professional web development. That means test-driven development, of course, and also techniques such as build automation, continuous integration, refactoring, and evolutionary design. We test against multiple browsers and platforms, including iOS, and we use Node.js on the server.

All videos are DRM-free, available for streaming or download, and all source code is included.

The Videos

The series consists of four main channels. The “Recorded Live” channel focuses on real-world development, warts and all. It’s meant for experienced programmers.

If you’re a new developer, the “How To” channel is for you. It’s meant for beginners who have recently learned to program and are ready to start their professional career.

The “Lessons Learned” channel provides concise reviews of key topics, such as continuous integration, test-driven development, and build automation. It’s great for review and reference.

Advanced programmers will enjoy “The Lab”, our channel focused on exploring new tools and ideas.

Release Schedule

New videos are published every week. At the time of this writing, a new “Recorded Live” episode is released every Monday and Wednesday, and a new “How To” episode is released every Friday.

When the current “How To” season finishes, we will probably return releasing a new “Lessons Learned” or “The Lab” episode on the first Friday of every month.

“Recorded Live” and “How To” episodes are about 15 minutes long. “Lessons Learned” videos are typically about 15-30 minutes long, and episodes of “The Lab” tend to be about an hour.

I have learned so much more than I expected.
I really enjoy your approach to screencasting and
wish the series wouldn’t end some day.