Jasmine - A BDD test framework for JavaScript

download Jasmine - A BDD test framework for JavaScript

of 30

description

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.

Transcript of Jasmine - A BDD test framework for JavaScript

  • TDD BDD - Jasmine

  • AgendaIntroducing TDDSteps to BDDFamiliarize terminologyInstallationExecuting jasmine Write tests in jasmineWhat next?

  • TDDInvolves writing tests before writing the code being testedWrite 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 - ChallengesAs the code size increases more refactor becomes critical

    Since most of the time the features are not pre-determined reviewing/refactoring does prove as time consuming and becomes expensive

  • So what next???In real time objects are the carriersThey extend the behavior of classesThis would be mean, what an object does is significantly more important!Its all behavior

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

  • BDDBDD puts the focus on Behavior rather than structureExamplesUser inputting valuesAwaiting for the feedbackCalculations/logicIts all behavior

  • BDD TriadFor 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

  • JasmineIts a BDD Framework for testing JavaScript

    Does not depend on other frameworksDoes not require a DOMClean & Obvious syntaxInfluenced by Rspec, JSSpec, JspecAvailable as stand-alone, ruby gem, Node.js module, as Maven plugin

  • Principles

    Should not be tied to any browser, framework, platform or host languageShould have idiomatic and unsurprising syntaxShould work wherever JavaScript runsShould play well with IDEs

  • Goals

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

  • TerminologySpecsSuitesdescribeitexpectmatchersmocksspies

  • InstallationRequired files/structureDownload stand alone zip file include the lib files

    Include styles as well

  • Implementation/File structurejasmine-example/

    lib/jasmine-1.3.1/jasmine.jsjasmine-1.3.1/jasmine-html.jsjasmine-1.0.0.rc1/jasmine.css

    specs/SpecHelper.jsBasicMathSpec.js

    scripts/BasicMath.js

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

  • describe ... itdescribe accepts a string or class. Helps in organizing specs

    it is what describes the spec. It optionally takes a string

    // Jasminedescribe Calculate, function() { describe #Add, function(){ it should give sum, function(){ ----- ----- }; });});

  • Filters// Jasminevar 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 - variablesSpec - describe('panda',function(){ it('is happy',function(){ expect(panda).toBe('happy'); });});

    JavaScriptpanda = happy;

  • Specs - functionsSpecdescribe('Hello World function',function(){ it('just prints a string',function(){ expect(helloWorld()).toEqual("Hello world!"); });});

    JavaScriptfunction helloWorld(){ return "Hello world!";}

  • Specs matchersSpecdescribe('Hello World function',function(){ it('just prints a string',function(){ expect(helloWorld()).toContain("world!"); });});

    JavaScriptfunction helloWorld(){ return "Hello world!";}

  • DEMO

  • What next?

    SpiesMocking/Fakingcoffee-script jasmine-jquery jasmine-fixture jasmine-stealth

  • DEMO

  • ThanksReferences:

    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

    ************