Jasmine
MOAR TESTS
Le problème
La fausse solution
Les outils
●
RequireJS pour modulariser http://requirejs.org/
●
Jasmine pour tester
http://pivotal.github.io/jasmine/
Que fait RequireJS ?
Il permet de gérer les dépendances de chaque
fichier :
models/truc.js:
<module> <deps> <callback>
def...
Dans quel but ?
●
S'assurer qu'un fichier est correctement chargé
avec ses dépendances
●
Pouvoir ne charger que ce dont on...
Comment utiliser Jasmine ?
●
Page web “classique”, pratique pour test/debug
●
Automatisé avec NodeJS, pour intégration
con...
Test simple
tests/models/truc.js:
define('tests/models/truc', ['models/truc'], function(Truc)
{
describe('models/truc', fu...
Quelques fonctions
● .toBe()
● .not.toBe()
● .toMatch(/regexp/)
● .toBeDefined()
● .toBeNull()
http://pivotal.github.io/ja...
Hiérarchie
●
Imbriquez les describe() à volonté !
●
describe(module)
– describe(sous-module)
●
describe(classe)
– describe...
beforeEach() et afterEach()
●
Respectivement exécuté avant et après chaque
test
●
Concerne seulement le describe() en cour...
Espions
●
Intercepte une
fonction
●
Ne l'exécute pas
●
Vérifie son exécution
●
Génère un retour
Syntaxe des espions
spyOn(truc, 'someFunction');
truc.someFunction(123);
expect(truc.someFunction).toHaveBeenCalled();
exp...
Options
●
spyOn().andCallThrough() pour que la fonction
soit tout de même appelée
●
spyOn().andReturn(123) pour que la fon...
Et l'asynchrone ?
runs(function() {
doSomeAjax(function callback() {
truc.someProperty = true;
});
});
waitsFor(function()...
Donc ?
●
Tester son code, c'est
bien
●
Utiliser Jasmine, c'est
mieux
●
Avec RequireJS ?
1MD2Pm2cbmdgNVkP5kH6cYHZvBDYQFCQnC
Prochain SlideShare
Chargement dans…5
×

Human Talks Jasmine

380 vues

Publié le

  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

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

×