Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Human Talks Jasmine

401 views

Published on

  • Be the first to comment

  • Be the first to like this

Human Talks Jasmine

  1. 1. Jasmine MOAR TESTS
  2. 2. Le problème
  3. 3. La fausse solution
  4. 4. Les outils ● RequireJS pour modulariser http://requirejs.org/ ● Jasmine pour tester http://pivotal.github.io/jasmine/
  5. 5. Que fait RequireJS ? Il permet de gérer les dépendances de chaque fichier : models/truc.js: <module> <deps> <callback> define('models/truc', ['backbone'], function(Backbone) { return Backbone.Model.extend({}); });
  6. 6. Dans quel but ? ● S'assurer qu'un fichier est correctement chargé avec ses dépendances ● Pouvoir ne charger que ce dont on a besoin ● Utiliser r.js pour minifier le tout
  7. 7. Comment utiliser Jasmine ? ● Page web “classique”, pratique pour test/debug ● Automatisé avec NodeJS, pour intégration continue
  8. 8. Test simple tests/models/truc.js: define('tests/models/truc', ['models/truc'], function(Truc) { describe('models/truc', function() { describe('someFunction()', function() { it('always returns true', function() { expect(new Truc().someFunction()).toBe(true); }); }); }); });
  9. 9. Quelques fonctions ● .toBe() ● .not.toBe() ● .toMatch(/regexp/) ● .toBeDefined() ● .toBeNull() http://pivotal.github.io/jasmine/#section-Expectations
  10. 10. Hiérarchie ● Imbriquez les describe() à volonté ! ● describe(module) – describe(sous-module) ● describe(classe) – describe(fonction)
  11. 11. beforeEach() et afterEach() ● Respectivement exécuté avant et après chaque test ● Concerne seulement le describe() en cours describe('whatever', function() { var truc; beforeEach(function() { truc = new Truc(); }); });
  12. 12. Espions ● Intercepte une fonction ● Ne l'exécute pas ● Vérifie son exécution ● Génère un retour
  13. 13. Syntaxe des espions spyOn(truc, 'someFunction'); truc.someFunction(123); expect(truc.someFunction).toHaveBeenCalled(); expect(truc.someFunction).toHaveBeenCalledWith(123);
  14. 14. Options ● spyOn().andCallThrough() pour que la fonction soit tout de même appelée ● spyOn().andReturn(123) pour que la fonction retourne une valeur particulière ● spyOn().andCallFake(function(){}) pour remplacer la fonction par une autre
  15. 15. Et l'asynchrone ? runs(function() { doSomeAjax(function callback() { truc.someProperty = true; }); }); waitsFor(function() { return truc.someProperty; }, 'should do something', 1000); // 1000 = timeout runs(function() { expect(truc.someProperty).toBe(true); });
  16. 16. Donc ? ● Tester son code, c'est bien ● Utiliser Jasmine, c'est mieux ● Avec RequireJS ?
  17. 17. 1MD2Pm2cbmdgNVkP5kH6cYHZvBDYQFCQnC

×