Using State Tables for Testing

Tests can benefit a project in many different ways. For example, they help ensure that the software behaves as expected. They also help document that functionality for pieces of code that other developers may have to maintain. Lately, I’ve been using state tables in my tests to improve both of these benefits. State tables allow for […]

Testing Email Workflows Using Disposable Email Addresses

A sometimes tricky and always mundane element of developing web applications is testing email workflows such as account registration or invitation. In this post I will go over some strategies for using disposable email to do just that. Email Workflows Almost universally, online identities are tied to one of three things: an email address, an […]

Accept It: Software is Wabi-sabi

Last week, after dealing with a frustrating build and deployment issue, I reflected on what makes software development frustrating at times–specifically, the well-known feeling that code “rots” over time. I happened to glance at a small Zen rock garden my wife had given me long ago and was reminded of wabi-sabi.

Bye-Bye, Sinon – Hello, testdouble

UPDATE: Justin Searls, the author of testdouble.js sent me an email with some notes on this post. I’ve added some his comments below to provide some additional context. I’ve been working in JavaScript-land for the last little while, writing lots of Node.js code. Since I practice TDD, I’m always trying to keep my eye on […]

How I Test CSS

At Atomic, we practice Test-Driven Development for all the code we can, from single functions to entire stacks. But there’s one kind of code we’ve long neglected testing: CSS. We rarely have coverage of it, and we often discover bugs and style regressions long after they were introduced. We’re not alone. Most software developers don’t […]

Evaluating Property-Based Testing Through a Random Walk

Lately, I’ve been interested in property-based testing. It’s a sort of “Monte Carlo”-esque approach where you execute your application randomly (rather than according to strict scripts) and test that it never reaches an invalid state. It has proven usefulness in lower-level software (such as implementations of data structures), but I’ve been wondering if it could […]