28
SELA DEVELOPER PRACTICE Gil Fink Front-End Unit Testing Using Jasmine

Front end unit testing using jasmine

Embed Size (px)

DESCRIPTION

A session about BDD and unit testing with Jasmine framework

Citation preview

Page 1: Front end unit testing using jasmine

SELA DEVELOPER PRACTICE

Gil Fink

Front-End Unit Testing

Using Jasmine

Page 2: Front end unit testing using jasmine

Agenda

Unit Testing in JavaScript?

Behavior Driven Development

Jasmine

Jasmine and Karma

Page 3: Front end unit testing using jasmine

Life Without Unit Testing

Page 4: Front end unit testing using jasmine

Why Unit Testing?

Tests

Act as safety net when you modify your code

Increase your confidence in your code

Encourage good design

Help to detect bugs in early stages of the project

Serve as live documentation

Page 5: Front end unit testing using jasmine

Unit Testing in JavaScript?

JavaScript is everywhere

Browsers

Servers

Operation Systems

Databases

Mobile

Devices

You are doing it in any other language…

Page 6: Front end unit testing using jasmine

Behavior Driven Development (BDD)

Page 7: Front end unit testing using jasmine

BDD – Cont.

In BDD you describe your code

tell the test what it (the code) should do

expect your code to do something

The user can read the output and understand it

//suite describe ('', function(){ //test it ('', function(){ //expectation expect(); )}; });

Page 8: Front end unit testing using jasmine

Jasmine

A JavaScript BDD framework

Can be downloaded from: http://jasmine.github.io/

Page 9: Front end unit testing using jasmine

Setting Up The Environment

Download Jasmine or use a package manager such as Bower or Nuget

Create a Spec (Test) Runner file Responsible to run all the unit tests

Runs in the browser

Create the Unit Test files

Jasmine can also run headless Without a browser context

Page 10: Front end unit testing using jasmine

Demo

Setting the Environment

Page 11: Front end unit testing using jasmine

Jasmine Tests Suites

First create a Suite which is a container of Specs

Use the describe function

describe("Suite Name", function() {

// Put here your tests

});

Page 12: Front end unit testing using jasmine

Jasmine Tests

A Spec (Test) is defined by calling the it function

Receives a spec name and a spec callback function

Contains expectations that test the state of the code

describe("Suite Name", function() {

it("a spec with one expectation", function() {

// create the spec body

});

});

Page 13: Front end unit testing using jasmine

Expectations

Expectations are assertions that can be either true or false

Use the expect function within a spec to declare an expectation

Receives the actual value to test as parameter

Include fluent API for matchers

A Matcher is a Boolean comparison between the actual value and the expected value

Page 14: Front end unit testing using jasmine

Matchers

it("matchers", function() {

var a = 12;

var b = a;

var c = function () {

}

expect(a).toBe(b);

expect(a).not.toBe(null);

expect(a).toEqual(12);

expect(null).toBeNull();

expect(c).not.toThrow();

});

Page 15: Front end unit testing using jasmine

Demo

Creating Suites and Specs

Page 16: Front end unit testing using jasmine

Setup and Teardown

Jasmine includes

beforeEach – runs before each test

afterEach – runs after each test

Should exists inside a test suite

Page 17: Front end unit testing using jasmine

Setup and Teardown Example

describe("A suite", function() {

var index = 0;

beforeEach(function() {

index += 1;

});

afterEach(function() {

index = 0;

});

it("a spec", function() {

expect(index).toEqual(1);

});

});

Page 18: Front end unit testing using jasmine

Demo

Using Setup and Teardown

Page 19: Front end unit testing using jasmine

Working with Spies

A spy is a test double object

It replaces the real implementation and fake its behavior

Use spyOn, createSpy and createSpyObj functions

Page 20: Front end unit testing using jasmine

Demo

Working with Spies

Page 21: Front end unit testing using jasmine

Jasmine Async Support

Jasmine enables to test async code

Calls to beforeEach, it, and afterEach take an additional done function

beforeEach(function(done) { setTimeout(function() { value = 0; done(); }, 1); }); // spec will not start until the done in beforeEach is called it("should support async execution", function(done) { value++; expect(value).toBeGreaterThan(0); done(); });

Page 22: Front end unit testing using jasmine

Demo

Working with Async Functions

Page 23: Front end unit testing using jasmine

Jasmine and Karma

Karma is a test runner for JavaScript

Executes JavaScript code in multiple browser instances

Makes BDD/TDD development easier

Can use any JavaScript testing library

In this session we will use Jasmine

Page 24: Front end unit testing using jasmine

Demo

Jasmine and Karma

Page 25: Front end unit testing using jasmine

Questions

Page 26: Front end unit testing using jasmine

Summary

Unit Tests are an important part of any development process

Jasmine library can help you to test your JavaScript code

Add tests to your JavaScript code!

Page 27: Front end unit testing using jasmine

Resources

Session slide deck – http://slidesha.re/1mO08Mq

Jasmine – http://jasmine.github.io/

My Website – http://www.gilfink.net

Follow me on Twitter – @gilfink

Page 28: Front end unit testing using jasmine

THANK YOU

Gil Fink @gilfink http://www.gilfink.net