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));
});