Jasmine - A BDD Test Framework For JavaScript
Jasmine - A BDD Test Framework For JavaScript
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
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>
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.
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]
http://trupil.blogspot.in/2010/10/traffic-rules-follow-it.html