31
Quick Tour to Front-End Unit Testing Using Jasmine #devconnections Gil Fink Senior Consultant sparXys

Quick tour to front end unit testing using jasmine

Embed Size (px)

DESCRIPTION

A session that I deliver in DevConnections 2014. The session explains how to do JavaScript unit testing using the Jasmine framework.

Citation preview

Page 1: Quick tour to front end unit testing using jasmine

Quick Tour to Front-End Unit

Testing Using Jasmine

#devconnections

Gil Fink Senior Consultant

sparXys

Page 2: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

Agenda

• Why Unit Testing?

• Unit Testing in JavaScript?

• Behavior Driven Development

• Jasmine

• Jasmine and Karma

Page 3: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

Why Unit Testing?

Page 4: Quick tour to front end unit testing using jasmine

QUICK TOUR TO 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: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

Behavior Driven Development

• In BDD you

– describe your code

– tell the test what it (the code) should do

– expect your code to do something

//suite

describe ('', function(){

//test

it ('', function(){

//expectation

expect();

)};

});

Page 6: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

BDD and TDD

Page 7: Quick tour to front end unit testing using jasmine

QUICK TOUR TO 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 8: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

Jasmine

• A JavaScript BDD framework

• Can be downloaded from:

http://jasmine.github.io/

Page 9: Quick tour to front end unit testing using jasmine

QUICK TOUR TO 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: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

SETTING THE ENVIRONMENT

Demo

Page 11: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

Suggested Folder Structure

js

|--tests

| |--spec

|--vendor

| |--Jasmine

SpecRunner.html

#devconnections

Page 12: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

Jasmine Tests Suites

• First create a Suite which is a container

of Specs

– Use the describe function

– Typically a single suite should be written

for each JavaScript file

describe("Suite Name", function() {

// Put here your tests

});

Page 13: Quick tour to front end unit testing using jasmine

QUICK TOUR TO 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 14: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

Expectations

• Expectations are assertions

– Can be either true or false

• Use the expect function within a spec

to declare an expectation

– Receives the actual value as parameter

• Include fluent API for matchers

– A Matcher is a comparison between the

actual and the expected values

Page 15: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

Matchers Example

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 16: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

CREATING SUITES AND SPECS

Demo

Page 17: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

More on Suites and Specs • You can disable a test suite by using

xdescribe

• You can mark a spec as pending (not

running)

– Using xit

– By calling the pending function

#devconnections

xdescribe("A spec", function() {

xit(“that is pending", function() {

pending();

});

});

Page 18: Quick tour to front end unit testing using jasmine

QUICK TOUR TO 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 19: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

Setup/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 20: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

USING SETUP AND TEARDOWN

Demo

Page 21: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

Nested describe Calls

• Calls for describe can be nested

– Good for creation of hierarchies

• The beforeEach/afterEach of nested

describe runs after a parent describe

#devconnections

describe("A spec", function() {

describe("nested inside a second describe", function() {

});

});

Page 22: Quick tour to front end unit testing using jasmine

QUICK TOUR TO 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 23: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

WORKING WITH SPIES

Demo

Page 24: Quick tour to front end unit testing using jasmine

QUICK TOUR TO 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 25: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

WORKING WITH ASYNC

FUNCTIONS

Demo

Page 26: Quick tour to front end unit testing using jasmine

QUICK TOUR TO 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 27: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

JASMINE AND KARMA

Demo

Page 28: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

QUESTIONS?

Page 29: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

Summary

• Unit Tests are an important part of any

development process

• Jasmine library can help you test your

JavaScript code

• Add tests to your JavaScript code!

Page 30: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

Resources

• Session slide deck –

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

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

• Follow me on Twitter – @gilfink

Page 31: Quick tour to front end unit testing using jasmine

QUICK TOUR TO FRONT-END UNIT TESTING USING JASMINE

THANK YOU