Chapter 5. More Jasmine Features

Jasmine has a number of other useful features, which help you write tests that are more advanced.

Before and After

Another useful feature of Jasmine is actually a twofer: beforeEach and afterEach. They allow you to execute some code—you guessed it—before and after each spec. This can be very useful for factoring out common code or cleaning up variables after tests.

To execute some code before every spec, simply put it in a beforeEach. Note that you have to scope variables properly in order to have them throughout each spec:

  describe("employee", function() {
      var employee;    // Note the scoping of this variable.
      beforeEach(function() {
          employee = new Employee;
      });
      it("has a name", function() {
          expect(employee.name).toBeDefined();
      });
      it("has a role", function() {
          expect(employee.role).toBeDefined();
      });
  });

Similarly, if you’d like to execute something after each spec, simply put it in the cleverly named afterEach. I use this much less than beforeEach, but it’s useful when you want to do cleanup, for example:

  describe("Calculator", function() {
      var calculator = new Calculator;
      afterEach(function() {
          calculator.reset();
      });
      it("can add two positive integers", function() {
          expect(calculator.add(5, 12)).toEqual(17);
      });
      it("can add two negative integers", function() {
          expect(calculator.add(-5, -12)).toEqual(-17);
      });
  });

Nested Suites

As your code gets more complex, you might want to organize your suites into groups, subgroups sub-subgroups, and so ...

Get JavaScript Testing with Jasmine now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.