0% found this document useful (0 votes)
657 views

Jasmine - A BDD Test Framework For JavaScript

Jasmine is the BDD implementation for JavaScript. With it's Behavior Driven approach developers are empowered with more testing capabiliites. Although BDD is principally an idea about how software development should be managed by both business interests and technical insight, the practice of BDD does assume the use of specialized software tools to support the development process.

Uploaded by

Sumanth Krishna
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
657 views

Jasmine - A BDD Test Framework For JavaScript

Jasmine is the BDD implementation for JavaScript. With it's Behavior Driven approach developers are empowered with more testing capabiliites. Although BDD is principally an idea about how software development should be managed by both business interests and technical insight, the practice of BDD does assume the use of specialized software tools to support the development process.

Uploaded by

Sumanth Krishna
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 30

TDD BDD - Jasmine

Agenda
Introducing TDD Steps to BDD Familiarize terminology Installation Executing jasmine Write tests in jasmine What next?

TDD
Involves writing tests before writing the code being tested Write a small test first (at this point of time no code being written!) Run the test (obviously, it fails!) Now make the test pass (well write some code) Observe the design, refactor

TDD - Challenges
As the code size increases more refactor becomes critical Since most of the time the features are not predetermined reviewing/refactoring does prove as time consuming and becomes expensive

So what next???
In real time objects are the carriers They extend the behavior of classes This would be mean, what an object does is significantly more important! Its all behavior

BDD
Behaviour Driven Development is an Agile development process that comprises aspects of
Acceptance Test Driven Planning, Domain Driven Design Test Driven Development

BDD
BDD puts the focus on Behavior rather than structure Examples
User inputting values Awaiting for the feedback Calculations/logic

Its all behavior

BDD Triad
For better communication across the levels (Business analysts, Developers, Testers) in software development we narrate/describe the logical chunks as scenarios
Given/When/Then called as BDD triad

BDD Cycle

Jasmine

Jasmine
Its a BDD Framework for testing JavaScript
Does not depend on other frameworks Does not require a DOM Clean & Obvious syntax Influenced by Rspec, JSSpec, Jspec Available as stand-alone, ruby gem, Node.js module, as Maven plugin

Principles
Should not be tied to any browser, framework, platform or host language Should have idiomatic and unsurprising syntax Should work wherever JavaScript runs Should play well with IDEs

Goals
It should encourage good testing practices It should be simple to get start with It should integrate easily with continuous build systems

Terminology
Specs Suites describe it expect matchers mocks spies

Installation
Required files/structure Download stand alone zip file include the lib files
<script type="text/javascript" src="lib/jasmine-1.0.0.rc1/jasmine.js"></script> <script type="text/javascript" src="lib/jasmine-1.0.0.rc1/jasmine-html.js"></script>

Include styles as well


<link rel="stylesheet" type="text/css" href="lib/jasmine-1.0.0.rc1/jasmine.css">

Implementation/File structure
jasmine-example/
lib/
jasmine-1.3.1/jasmine.js jasmine-1.3.1/jasmine-html.js jasmine-1.0.0.rc1/jasmine.css

specs/
SpecHelper.js BasicMathSpec.js

scripts/
BasicMath.js

http://try-jasmine.heroku.com/

describe ... it
// Jasmine describe Calculate, function() { describe #Add, function(){ it should give sum, function(){ --------}; }); }); describe accepts a string or class. Helps in organizing specs
it is what describes the spec. It optionally takes a string

Filters
// Jasmine var calc; beforeEach(function(){ calc = new Calculator(); }); afterEach(function(){ calc.reset(); }); Pretty handy to create data for each test before runs the specified block before each test.

after runs the specified block after each test.

Expectations
//Jasmine it (should return the sum, function(){ calc = new Calculator(); expect(calc.Add(4,5).toEqual(9)); expect(calc.Add(4,4).not.toEqual(9)); });

http://try-jasmine.heroku.com/

DEMO

Specs - variables
Spec describe('panda',function(){ it('is happy',function(){ expect(panda).toBe('happy'); }); }); JavaScript panda = happy;

Specs - functions
Spec describe('Hello World function',function(){ it('just prints a string',function(){ expect(helloWorld()).toEqual("Hello world!"); }); }); JavaScript function helloWorld(){ return "Hello world!"; }

Specs matchers
Spec describe('Hello World function',function(){ it('just prints a string',function(){ expect(helloWorld()).toContain("world!"); }); }); JavaScript function helloWorld(){ return "Hello world!"; }

DEMO

What next?
Spies Mocking/Faking coffee-script jasmine-jquery jasmine-fixture jasmine-stealth

DEMO

Thanks
References: http://blog.bandzarewicz.com/blog/2012/03/08/jasmine-cheat-sheet/ http://evanhahn.com/how-do-i-jasmine/ http://tobyho.com/2011/12/15/jasmine-spy-cheatsheet/ https://github.com/pivotal/jasmine/wiki/Spies [email protected]

Follow Traffic Rules

http://trupil.blogspot.in/2010/10/traffic-rules-follow-it.html

You might also like