unit testing with mocha

32
TESTING WITH MOCHA @revathskumar

Upload: revath-s-kumar

Post on 19-Jun-2015

993 views

Category:

Technology


6 download

DESCRIPTION

Helps to get started with testing in JavaScript using mocha.

TRANSCRIPT

Page 1: Unit testing with mocha

TESTING WITH MOCHA

@revathskumar

Page 2: Unit testing with mocha

ABOUTRubyist / JavaScripter

Team Member / / Works at Blog at Twitter/Github - Google+:

Yeoman @keralarb @keralajs@whatznear

blog.revathskumar.com@revathskumar

+RevathSKumar

Page 3: Unit testing with mocha

AGENDAMocha FeaturesBDD/TDD syntaxChai assert libraryTesting asynchronous codeTesting in Node.js and BrowserGrunt and gulp tasks

Page 4: Unit testing with mocha

NEVER TRUST YOUR CODE

Page 5: Unit testing with mocha

TESTING FRAMEWORKSMochaJasmineQUnit

Page 6: Unit testing with mocha

MOCHA

Page 7: Unit testing with mocha

MOCHA: FEATURESRuns on Node.js/BrowserSupports BDD/TDDChoose any assertion libraryChoose any Mocking libraryAsync and promise supportHighlights slow testsFile watcher supportOptionally run tests that match a regexp

Page 8: Unit testing with mocha

MOCHA: TDDsuite('Calculator', function () {

suite('Add', function(){

test("using both positive numbers", function(){ // test assertion });

test("using both negative numbers", function(){ // test assertion }); });

});

Page 9: Unit testing with mocha

MOCHA: SETUP & TEARDOWNsuite('Calculator', function () {

setup(function(){ // runs before test });

//test("add using both positive numbers", function(){ // test assertion //});

teardown(function(){ // runs after tests });

});

Page 10: Unit testing with mocha

MOCHA: BDDdescribe('Calculator', function () {

describe('add', function () {

it('using both positive numbers',function(){ // test assertion });

it('using both negative numbers',function(){ // test assertion }); });

});

Page 11: Unit testing with mocha

MOCHA: BEFORE & AFTERdescribe('Calculator', function () {

before(function(){

})

after(function(){

})

});

beforeEachafterEach

Page 12: Unit testing with mocha

CHAI.JSchai.assertchai.expectchai.should

Page 13: Unit testing with mocha

CHAI: ASSERT

chai.assert(expression, [message])chai.assert(actual, expected, [message])

ok()notOk()fail()isTrue()isFalse()isNUll()

Page 14: Unit testing with mocha

CHAI: EXPECT

chai.expect(expected).to.not.equal(actual);chai.expect(expected).to.be.a('string');

okinclude()truefalseempty

Page 15: Unit testing with mocha

CHAI: SHOULDvalue.should.be.an('object');value.should.equal(10);

value.should.be.a('string')

object.should.have.property('key')

Page 16: Unit testing with mocha

NODE.JSnpm install -g mocha

npm install -g chai

Page 17: Unit testing with mocha

NODE-TEST// calculator.jsCalculator = { add: function(a, b) { return a + b; }}

module.exports = Calculator

// test.jsvar Calc = require("./calculator");var assert = require("chai").assert

suite("add", function(){ test("two positive", function(){ assert(Calc.add(1,3), 4); });

test("positive and negaive", function(){ assert(Calc.add(-5,4), 1); })});

Page 18: Unit testing with mocha

EXECUTE IN CLImocha --ui=tdd ./test-tdd.jsmocha --ui=tdd --watch ./test-tdd.jsmocha --ui=tdd --grep="positive" ./test-tdd.js

Page 19: Unit testing with mocha
Page 20: Unit testing with mocha

BROWSERbower install mocha

bower install chai

Page 21: Unit testing with mocha

BROWSER-TESTCalc = { add: function(a, b){ return a + b; }}

mocha.setup('tdd');var assert = chai.assert;

suite("add", function(){ test("two positive", function(){ assert(Calc.add(1,3), 4); });

test("positive and negaive", function(){ assert(Calc.add(-5,4), 1); })});

mocha.run();

Page 22: Unit testing with mocha
Page 23: Unit testing with mocha

ASYNCHRONOUSCalc = { add: function(a, b, fn){ fn(a + b); }}

suite("add", function(){ test("two positive", function(done){ Calc.add(1,3, function(result){ assert(result, 4); done(); })

});});

Page 24: Unit testing with mocha

PENDING TESTSMark as pendingtest without callback

suite("add", function(){ test("two positive");});

Page 25: Unit testing with mocha

EXCLUSIVE TESTSRun only specific test/suitesimilar to grep

suite("add", function(){ test.only("two positive", function(){ assert(Calc.add(1,3), 4); });

test("positive and negaive", function(done){ assert(Calc.add(-5, 4), -1); })});

Page 26: Unit testing with mocha

SKIP TESTSsuite("add", function(){ test.skip("two positive", function(){ assert(Calc.add(1,3), 4); });

test("positive and negaive", function(done){ assert(Calc.add(-5, 4), -1); })});

Page 27: Unit testing with mocha

USING GRUNTnpm install -g grunt-cli

npm install grunt --save-dev

npm install grunt-mocha --save-dev

Page 28: Unit testing with mocha

GRUNT CONFIGmodule.exports = function(grunt) { grunt.loadNpmTasks('grunt-mocha');

grunt.initConfig({ mocha: { test: { src: ['tests/**/*.html'], }, } });}

Page 29: Unit testing with mocha

USING GULPnpm install -g gulp

npm install --save-dev gulp-mocha

Page 30: Unit testing with mocha

GULP CONFIGvar gulp = require('gulp');var mocha = require('gulp-mocha');

gulp.task('default', function () { return gulp.src('test.js', {ui: tdd}) .pipe(mocha());});

Page 31: Unit testing with mocha

REFERENCESMocha : Chai.js :

Grunt :

grunt-mocha :

Gulp :

gulp-mocha :

Testing AJAX :

code :

slides :

https://visionmedia.github.io/mocha/http://chaijs.com/

http://gruntjs.com/

https://github.com/kmiyashiro/grunt-mocha

http://gulpjs.com/

https://github.com/sindresorhus/gulp-mocha

http://blog.revathskumar.com/2013/03/testing-jquery-ajax-with-mocha-and-sinon.html

http://jsbin.com/veqop/6/edit

https://speakerdeck.com/revathskumar/testing-with-mocha

Page 32: Unit testing with mocha

QUESTIONS?

Revath S Kumar@revathskumar

http://blog.revathskumar.com