Tester son application Rails avec RSPEC
Martin Fowler
Refactoring is the process of
changing a software system
in such a way that it
does not alter the external behavior
of the code
yet improves the internal structure.
Benefits 1/3
Tests give you confidence to refactor constantly
Benefits 2/3
Tests help defer design decisions and abstractions because they focus on the interface
Benefits 3/3
Tests expose design flaws:
when the design is bad,
testing is hard
QUOI tester ?
Je préfère le haut niveau
Mais ça peut vite coûter cher
INTEGRATION
Check that a user can set her profile as private
- Create a Profile_A (public by default)
- Create a Profile_B (for the visibility test)
- Login as Profile_B
- Check that Profile_A is available
- Logout
- Login as Profile_A
- Set profile as private
- Logout
- Login as Profile_B
- Check that Profile_A is "not available"
Tester le bas niveau
UNITAIRES
- Beaucoup de code
- Beaucoup de répétition
Mix des 2
- Tester les t/funnels importants
- Tester les méthodes quand c'est techniquement critique/fragile
Tester les "cas autoroutes" en haut
les cas particuliers en bas
quand même vérifier l'intégration !
QUAND tester ?
HIER !
- "J'étais occupée à..."
- Rattraper le retard
- Rajouter des tests avec les évolutions/fix
Pour commencer: FAIRE DES TESTS FACILES
le plus important, c'est de chopper le réflexe !
TDD
- Tester AVANT de coder
- Améliore l'architecture
- oblige à penser au lieu de coder en empirique
AU FIL DE L'EAU
- Comprendre la mécanique de base en testant "facile"
- models, services, etc...
- Refactorer ses tests au fur et à mesure
- les premiers tests ne seront pas excellents
- Mais on apprend au fil de l'eau ;)
- Quand on est motivé
- Coder une story/feature/bugfix en TDD
- s'apercevoir que le code est bien meilleur in fine
- sur le long terme, c'est en core plus ouf !
- (MAJ de Rails ...)
LET'S GO !
GEMS
- LEVEL 1
- Rspec (3.5.0)
- factory_girl_rails
- (Faker)
- shoulda_matcher
- database_cleaner
- LEVEL 2
- Capybara
- webmock
- LEVEL 3
- Cucumber
CONFIG
- Database with `_test`
- Synch dev & test DB
- ActiveRecord::Migration.maintain_test_schema!
- Install Gems
-
rails g rspec:install
- .rspec
- rails_helper VS spec_helper
CONFIG: bonus
config.generators do |g|
g.test_framework :rspec,
:fixtures => true,
:view_specs => true,
:helper_specs => true,
:routing_specs => true,
:controller_specs => true,
:request_specs => true;
g.fixture_replacement :factory_girl, :dir => "spec/factories"
end
TOOLS
- Test Coverage
- https://github.com/colszowka/simplecov
- Continuous Integration
- GitLab
- CircleCI
- https://codeclimate.com
- https://inch-ci.org/
REFS
- https://github.com/rspec/rspec-rails
- "Testing Rails How expert developers write maintenable tests"
- ThoughBot (Steiner, Quenneville)
- https://martinfowler.com/bliki/TestPyramid.html
- http://betterspecs.org/
- https://www.relishapp.com/rspec/ :(
- https://www.relishapp.com/rspec/rspec-rails/docs/gettingstarted
- http://rspec.info/
Questions ?
Tester son app Rails avec RSpec
By Guillaume Faure-Dumont
Tester son app Rails avec RSpec
- 647