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 ?

Made with Slides.com