Replacing RSpec controller specs, part 1: Request specs

Does your application's test suite rely heavily on controller specs? It's time to consider alternatives, as controller testing has changed in Rails 5. Here's one way to replace a common use of these specs, even if you haven't upgraded to Rails 5 yet. (August 29, 2016)

Improving Rails application documentation

I've been thinking about how to improve the quality of Rails code bases through better documentation practices. Here are some steps I'm taking in my own projects. (April 18, 2016)

Clearance: The other Rails authentication gem

Looking for a well-balanced authentication solution? Check out Clearance as an alternative to Devise and has_secure_password. (January 23, 2016)

Using RSpec in Atom

I love how extensible GitHub's Atom editor is. Here are some useful packages for using it to edit and run RSpec tests. (August 27, 2015)

Everyday Rails redesign for 2015: Initial notes and reflections

A behind-the-scenes look at the tools and decisions that led to the first major redesign of Everyday Rails in three years. (August 09, 2015)

Cloning Active Record objects and their associates with Deep Cloneable

Here's how I created sanitized sample data from real-world data, using a few lines of Ruby code and a very useful gem. (July 29, 2015)

How do assigns and reload work in Rails tests?

Rails offers a couple of methods to access persisted test data, but how do they work? Let's get some answers, with the help of Pry. (April 05, 2015)

Automating code review with Pronto (and friends)

Pronto helps streamline the code review process by automating what can be automated, so you can focus on the code's intent and design. Here's one example of how to use it. (February 17, 2015)

Switching from Selenium to Poltergeist in RSpec feature specs

A quick one, for readers of my RSpec book: Moving to a headless driver for faster JavaScript testing with Capybara. (January 27, 2015)

Simple data transfer with YamlDB

Ever need to transfer data from one database to another? Here's a solution that worked for me. (December 23, 2014)