Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Mocha: dulces pruebas con Javascript

Mocha: dulces pruebas con Javascript

Mocha es un framework de test unitarios para javascript, con excelentes features para automatizar pruebas tanto en entornos de servidor como en browsers o aplicaciones de escritorio/móviles que utilicen javascript.

En esta presentación, demostraremos las cualidades básicas que le dan un buen cuerpo a un desarrollo, y exploraremos los sabores que pueden acompañarlo, a través de pequeños ejemplos.

More Decks by Pablo Andrés Dorado Suárez

Other Decks in Programming

Transcript

  1. ¿Qué necesitas? 8  onzas de  Javascript recién  preparado  (recomiendo  io.js).

    Una cucharada (15  gramos)  de  npm en  polvo. ½  librería de  código  desarrollado. Código  de  prueba  al  gusto.
  2. 1. 2. 3… Mocha! “use strict”; var assert = require("assert");

    describe('Array', function(){ describe('#indexOf()', function(){ it("should return -­‐1 when the value is not present", function(){ assert.equal(-­‐1, [1, 2, 3].indexOf(5)); assert.equal(-­‐1, [1, 2, 3].indexOf(0)); }); }); });
  3. Mientras hierve… “use strict”; var expect = require("expect.js") , fs

    = require("fs"); describe('fs', function(){ describe('#exists()', function(){ it("file /foo/baz should exist", function(done){ fs.exists('/foo/baz', function(exists){ expect(exists).to.be.true; done(); }); }); }); });
  4. … podemos acortar la receta “use strict”; var User =

    require("../models/user"); describe('User', function(){ describe('#save()', function(){ it("should save without error", function(done){ var user = new User("Luna"); user.save(done); }); }); });
  5. Es muy prometedor “use strict”; var app = require("..") ,

    User = app.db.User; describe('User', function(){ describe('#insert()', function(){ it("should create a new user", function(done){ User.insert({ name: "Luna" }).then(function(){ done(); }).catch(done); }); }); });
  6. ¡Demasiado! “use strict”; var app = require("..") , User =

    app.db.User; describe('User', function(){ describe('#insert()', function(){ it("should create a new user", function(){ return User.insert({ name: "Luna" }); }); }); });
  7. ¡Si! Preparar la cafetera “use strict”; var app = require("..")

    , CoffeeMaker = app.db.CoffeeMaker; describe('CoffeeMaker', function(){ describe('#make()', function(){ before(function(done){ CoffeeMaker.turnOn(done); }); // ... }); });
  8. No, en serio… “use strict”; var app = require("..") ,

    Log = app.db.Log; describe(’Log', function(){ describe('#list()', function(){ before(function(done){ Log.collection.remove(done); }); // ... }); });
  9. Hay que hacer algo al final “use strict”; var app

    = require("..") , CoffeeMaker = app.db.CoffeeMaker; describe('CoffeeMaker', function(){ describe('#make()', function(){ // ... after(function(done){ CoffeeMaker.turnOff(done); }); }); });
  10. Según BDD “use strict”; describe('#indexOf()', function(){ context('when not present', function(){

    it('should not throw an error', function(){ [1, 2, 3].indexOf(5); }); }); context('when present', function(){ it('should return the index where the element first appears in the array', function(){ expect([1, 2, 3].indexOf(2)).to.eql(1); }); }); });
  11. O quizá TDD “use strict”; suite('Array', function(){ setup(function(){ // ...

    }); suite('#indexOf()', function(){ test("should return -­‐1 when the value is not present", function(){ assert.equal(-­‐1, [1, 2, 3].indexOf(2)); }); }); });
  12. ¿Algo al estilo module.exports? “use strict”; require("should.js"); module.exports = {

    before: function(){ // ... }, 'Array': { '#indexOf()': { "should return -­‐1 when the value is not present": function(){ [1, 2, 3].indexOf(4).should.equal(-­‐1); } } } };
  13. Referencias § Mocha  – the  fun,  simple,  flexible  javascript  test

     framework § Mocha  Wiki § Pandres95’s  Blog  – Sweet  testing  with  Mocha (artículo  donde encontrará  la   presentación,  con  links  a  código  en  GitHub)