Book Image

Jasmine JavaScript Testing

By : Paulo Ragonha
Book Image

Jasmine JavaScript Testing

By: Paulo Ragonha

Overview of this book

<p>From a little renegade scripting language to the de facto standard platform of today, JavaScript has become a universal language available in the widest range of devices; it is truly the 'write once, run everywhere’ language. However, as JavaScript applications become more complicated, testing and applying sustainable software engineering practices also become mandatory.</p> <p>Jasmine JavaScript Testing is a practical guide to a more sustainable JavaScript development process. You will learn by example how to drive the development of a web application using tests and best practices.</p> <p>This book is about becoming a better JavaScript developer. So, throughout the chapters, you will not only learn about writing tests, but also about the best practices for writing software in the JavaScript language. This book is about acknowledging JavaScript as a real platform for application development and leveraging all of its potential. You will also learn about tooling and automation and how to make your life easier and more productive.</p> <p>You will learn how to create a sustainable codebase with the help of Jasmine. We will take a look at integrated testing (with a backend NodeJS server) and how you can speed this process up by faking AJAX requests. As you progress through the book, you will learn about the challenges of testing an application built on top of a framework and how you can prevent your application from suffering from dependency management hell. Also, since your applications need to get into production, you will learn about optimizing the code to reduce the number of requests the browser needs to make while loading your application.</p> <p>With this book, you will learn everything you need to know to become a real professional in the ever-demanding JavaScript universe.</p>
Table of Contents (16 chapters)

The "bare" Spy


To understand the concept of behavior checking, let's revisit an example presented in Chapter 3, Testing Frontend Code, and test the observable behavior of NewInvestmentView:

describe("and when an investment is created", function() {
  var callbackSpy;
  var investment;

  beforeEach(function() {
    callbackSpy = jasmine.createSpy('callback');
    view.onCreate(callbackSpy);

    investment = view.create();
  });
  it("should invoke the 'onCreate' callback with the investment",function() {
    expect(callbackSpy).toHaveBeenCalled();
    expect(callbackSpy).toHaveBeenCalledWith(investment);
  });
});

During the spec setup, it creates a new Jasmine Spy using the jasmine.createSpy function while passing a name for it (callback), then it sets this spy as an observer of the View's create event using the onCreate function, and finally it invokes the create function to create a new investment.

Later on at the expectations, the spec uses the matcher's toHaveBeenCalled and toHaveBeenCalledWith...