les tests avec ruby on rails et rspec (in french)

42
Les Tests avec Ruby on Rails Jean-Michel Garnier <jean-michel arobase 21croissants point com> Paris On Rails – 10 Décembre 2007

Upload: jean-michel-garnier

Post on 22-Nov-2014

6.996 views

Category:

Technology


1 download

DESCRIPTION

Presentation given at Paris on Rails 2007

TRANSCRIPT

Page 1: Les Tests avec Ruby on Rails et RSpec (in French)

Les Tests avec Ruby on RailsJean-Michel Garnier <jean-michel arobase 21croissants point com>

Paris On Rails – 10 Décembre 2007

Page 2: Les Tests avec Ruby on Rails et RSpec (in French)

2Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Plan de la présentation

● Background– De 1975 ... à nos jours

● Théorie– RSpec par l'exemple

– Design, Spécifications, Documentation

● Pratique– Outils: Autotest, rcov, CruiseControl.rb

– RSpec on Rails, Selenium

Page 3: Les Tests avec Ruby on Rails et RSpec (in French)

Background

Page 4: Les Tests avec Ruby on Rails et RSpec (in French)
Page 5: Les Tests avec Ruby on Rails et RSpec (in French)

Qui est-ce?

Page 6: Les Tests avec Ruby on Rails et RSpec (in French)

FRED BROOKS

1975:

“The Mythical Man-Month”

● ¼ Spécificier

● 1/6 Programmer

● ½ Tests

1986:

“No Silver Bullet”

Modèle en V =

Vers le Modèle Itératifhttp://www.cs.unc.edu/~brooks/

Page 7: Les Tests avec Ruby on Rails et RSpec (in French)

Qui est-ce?

Page 8: Les Tests avec Ruby on Rails et RSpec (in French)

http://www.threeriversinstitute.org/Kent%20Beck.htm

1994:

● “Simple Smalltalk Testing”

Framework pour automatiser les tests unitaires

2002:

“Test Driven Development”

Ecrire les tests avant le code

KENT BECK

Page 9: Les Tests avec Ruby on Rails et RSpec (in French)

Qui est-ce?

Page 10: Les Tests avec Ruby on Rails et RSpec (in French)

MARTIN FOWLER

2000:● “Refactoring”● article sur l'Intégration

Continue

http://www.martinfowler.com

Page 11: Les Tests avec Ruby on Rails et RSpec (in French)

L'équipe de RSpec

● Début 2004 : BDD● Août 2005: RSpec 0.1● Mai 2007: RSpec 1.0● 30 250 downloads

(nº27) RubyForge● 40 contributeurs

Aslak Hellesøy (NO) David Chelimsky(US)

Dan North (UK)

+ Brian Takita Dave Astels Steve Baker Luke Redpath

Page 12: Les Tests avec Ruby on Rails et RSpec (in French)

Livres pour 2008

Page 13: Les Tests avec Ruby on Rails et RSpec (in French)

Théorie

Page 14: Les Tests avec Ruby on Rails et RSpec (in French)

Anatomie d'une spécificationC

ompo

rtem

ent (

cont

exte

)

Exemple

Exemple

Page 15: Les Tests avec Ruby on Rails et RSpec (in French)

should I stay or should I go?

RSpec ajoute 2 méthodes à la class 'Object': should et should_not

Avec Test::Unit :

Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Page 16: Les Tests avec Ruby on Rails et RSpec (in French)

Langage naturel (en VO)

Page 17: Les Tests avec Ruby on Rails et RSpec (in French)

ruby spec/project_spec.rb

Page 18: Les Tests avec Ruby on Rails et RSpec (in French)

Résultat

Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Page 19: Les Tests avec Ruby on Rails et RSpec (in French)

Customizer Rspec

Pas très lisible!

Solution: écrire son propre “Matcher”

Page 20: Les Tests avec Ruby on Rails et RSpec (in French)

http://martinfowler.com/articles/mocksArentStubs.html

Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Page 21: Les Tests avec Ruby on Rails et RSpec (in French)

Tests = Design

● TDD = On ne code que l'indispensable!

● Le Refactoring (Améliorer le code) ne provoque pas de regressions

● Utilisation de “mocks objects” pour définir l'API

● Le code de qualité est facile à tester

Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Page 22: Les Tests avec Ruby on Rails et RSpec (in French)

Tests = Spécifications

Page 23: Les Tests avec Ruby on Rails et RSpec (in French)

Tests = Documentation

● Exemples exécutable = Documentation toujours á jour

● Plus besoin de rdoc ;-)

Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Page 24: Les Tests avec Ruby on Rails et RSpec (in French)

Pratique

Page 25: Les Tests avec Ruby on Rails et RSpec (in French)

Démarrage

● Peep Code: RSpec (in english)

● IDE: RSpec intégré avec:

● Installer les plugins rspec et rspec_on_rails

● rake spec:generate

Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Page 26: Les Tests avec Ruby on Rails et RSpec (in French)

Autotest

● Problème: les specs s'executent pendant 10 min...

● Solution: Autotest n'execute que les specs nécessaires

Notifications visuelles (plugins Growl, Notify,...) et sonores

● Intégré avec

http://ph7spot.com/articles/getting_started_with_autotest

Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Page 27: Les Tests avec Ruby on Rails et RSpec (in French)

Garantir la couverture avec rcov

● sudo gem install rcov

● rake spec:rcov

http://eigenclass.org/hiki.rb?rcov

Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Page 28: Les Tests avec Ruby on Rails et RSpec (in French)

Couverture détaillée

Page 29: Les Tests avec Ruby on Rails et RSpec (in French)

Intégration Continue

http://cruisecontrolrb.thoughtworks.com

Le lapin il est ROUGE?Le Build il est cassé!

cruise add <name> -u <url>cruise start

http://nabaztag.rubyforge.org/

Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Page 30: Les Tests avec Ruby on Rails et RSpec (in French)

CruiseControl.rb

Page 31: Les Tests avec Ruby on Rails et RSpec (in French)

Exemple de spec/models

http://edgerepo.com/svn/opensource/ruby/plugins/rspec_expectation_matchers/

Page 32: Les Tests avec Ruby on Rails et RSpec (in French)

spec/models (méthodes Métier)

Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Page 33: Les Tests avec Ruby on Rails et RSpec (in French)

spec/models (Finders)

Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Page 34: Les Tests avec Ruby on Rails et RSpec (in French)

specs/fixtures

● Quelque problèmes: associations, lisibilité

● Mais ça s'améliore dans Rails 2.0 (un peu)

● Alternatives:– Fixture scenarios: http://errtheblog.com/post/7708

– Tests exemplars:

http://evang.eli.st/blog/2007/8/8/doin-the-fixtures-plugin-thing

Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Page 35: Les Tests avec Ruby on Rails et RSpec (in French)

Exemple de spec/controllers

Page 36: Les Tests avec Ruby on Rails et RSpec (in French)

Autres “matchers“

Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Page 37: Les Tests avec Ruby on Rails et RSpec (in French)

Spécifier les Vues?

Problème:

Les vues changent tout le temps !

Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Page 38: Les Tests avec Ruby on Rails et RSpec (in French)

Exemple de spec/views

Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Page 39: Les Tests avec Ruby on Rails et RSpec (in French)

Selenium

● Tests d'intégration + automatiser les tests d'acceptation des utilisateurs

● Vérifier si l'application fonctionne avec tous les butineurs du marché

● Compatible avec:

Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Page 40: Les Tests avec Ruby on Rails et RSpec (in French)

Selenium – le film

Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Page 41: Les Tests avec Ruby on Rails et RSpec (in French)

Selenium specs

90% de la spec GENERE AVEC SELENIUM-IDE !!!

Page 42: Les Tests avec Ruby on Rails et RSpec (in French)

42Paris On Rail 2007 – Copyright (c) Garnier Jean-Michel. Licence: Creative Commons.

Merci de votre attention!

Questions - Réponses