Book Image

RSpec Essentials

By : Mani Tadayon
Book Image

RSpec Essentials

By: Mani Tadayon

Overview of this book

This book will teach you how to use RSpec to write high-value tests for real-world code. We start with the key concepts of the unit and testability, followed by hands-on exploration of key features. From the beginning, we learn how to integrate tests into the overall development process to help create high-quality code, avoiding the dangers of testing for its own sake. We build up sample applications and their corresponding tests step by step, from simple beginnings to more sophisticated versions that include databases and external web services. We devote three chapters to web applications with rich JavaScript user interfaces, building one from the ground up using behavior-driven development (BDD) and test-driven development (TDD). The code examples are detailed enough to be realistic while simple enough to be easily understood. Testing concepts, development methodologies, and engineering tradeoffs are discussed in detail as they arise. This approach is designed to foster the reader’s ability to make well-informed decisions on their own.
Table of Contents (17 chapters)
RSpec Essentials
About the Author
About the Reviewers

Testing mixins with dummy containers

Ruby's mixin functionality can be very useful. Modules can group together useful features that can be added at runtime to any class. However, given the dynamic nature of Ruby, testing the mixin features of a module can be tricky.

Let's go back to the AddressValidator module we worked with in previous sections of this chapter and in Chapter 1, Exploring Testability from Unit Tests to Behavior-Driven Development and Chapter 2, Specifying Behavior with Examples and Matchers. We want to make this module into a mixin that we can add to any object with an address method. Then we can call address_valid? on the object to trigger all the validations.

Regardless of the complexity of the metaprogramming involved with a mixin, we can still treat it as a normal test case with a known input and expected output. The input, in this case, is not a set of arguments to a method, but a whole class into which we mix in the AddressValidator module:

describe AddressValidator do...