5 Tests de l'application - Gigeone/PROJET-8-OC-TO-DO-LIST GitHub Wiki
Framework de tests
Le framework de test utilisé est Jasmine. C'est est un framework de tests open source pour JavaScript. Il possède une syntaxe assez facile à prendre en main. Les tests unitaires sont des méthodes permettant de tester de façon unitaire des éléments d’un code source. Leur principal objectif est de vérifier le bon fonctionnement de sous-ensembles de code tels que les fonctions, les procédures, les classes, etc. Les tests unitaires garantissent que ces éléments de base fonctionnent comme souhaité et préviennent des potentiels bugs.
Localisation des tests
Tous les tests sont situés dans le fichier test/ControllerSpec.js. De nouveaux tests peuvent être ajoutés dans ce fichier.
Fonctionnement des tests
Les tests sont facilement lancés par l'ouverture du fichier test/SpecRunner.html dans un navigateur.
Screenshot montrant les tests complétés.
Test 1: Should show entries on startup
it('should show entries on start-up', function () {
var todo = {title: 'my todo'};
setUpModel([todo]);
subject.setView('');
expect(view.render).toHaveBeenCalledWith('showEntries', [todo]);
});
Test 2: Should show active entries
it("should show active entries", function() {
var todo = {title: 'my todo'};
setUpModel([todo]);
subject.setView('#/active');
expect(view.render).toHaveBeenCalledWith('showEntries', [todo]);
});
Test 3: Should show completed entries
it('should show completed entries', function () {
var todo = {title: 'my todo'};
setUpModel([todo]);
subject.setView('#/completed');
expect(view.render).toHaveBeenCalledWith('showEntries', [todo]);
});
Test 4: Should highlight "All" filter by default
it('should highlight "All" filter by default', function () {
setUpModel([]);
subject.setView("");
expect(view.render).toHaveBeenCalledWith("setFilter", "");
});
Test 5: Should highlight "All" filter when switching to active view
it('should highlight "Active" filter when switching to active view', function () {
setUpModel([]);
subject.setView("/active");
expect(view.render).toHaveBeenCalledWith("setFilter", "active");
});
Test 6: Should toggle all todos to completed
it('should toggle all todos to completed', function () {
var todos = [{
id: 42,
title: 'my todo',
completed: false
}, {
id: 21,
title: 'another todo',
completed: false
}];
setUpModel(todos);
subject.setView('');
view.trigger('toggleAll', {completed: true});
expect(model.update).toHaveBeenCalledWith(42, {completed: true}, jasmine.any(Function));
expect(model.update).toHaveBeenCalledWith(21, {completed: true}, jasmine.any(Function));
});
Test 7: Should update the view
it('should update the view', function () {
var todos = [{
id: 42,
title: 'my todo',
completed: true
}];
setUpModel(todos);
subject.setView('');
view.trigger('toggleAll', {completed: false});
expect(view.render).toHaveBeenCalledWith('elementComplete', {id: 42, completed: false});
});
Test 8: Should add new todo to the view
it('should add a new todo to the model', function () {
setUpModel([]);
subject.setView('');
view.trigger('newTodo', 'a new todo');
expect(model.create).toHaveBeenCalledWith('a new todo', jasmine.any(Function));
});
Test 9: Should remove an entry from the model
it('should remove an entry from the model', function () {
var todo = {id: 42, title: 'my todo', completed: true};
setUpModel([todo]);
subject.setView('');
view.trigger('itemRemove', {id: 42});
expect(model.remove).toHaveBeenCalledWith(42, jasmine.any(Function));
});