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
Credits
About the Author
About the Reviewers
www.PacktPub.com
Preface
Index

Mocking time


Code that deals with time and dates can be very difficult to test. Code can behave differently based on the time of day or the day of the year. Time is a peculiar type of state which we can usually ignore in our code, but when code interacts directly with time, we have to face the complexities of time. Time-related bugs can be especially tricky, dangerous, and difficult to reproduce. Time is also related intrinsically to place, since we have to take time zones into account, as well as daylight saving time, which varies from country to country (and from region to region within certain countries).

Fortunately, there are libraries specifically designed to mock time. In this section, we'll learn how to use the Timecop gem (https://github.com/travisjeffery/timecop) to test time-related code.

Let's work with a Schedule class that allows appointments to be created. We don't want appointments to be made for any date in the past. We can test for this without any special code, as follows...