25 votes

Rails : Bonne utilisation de l'exemple Rspec2 (aussi : Cucumber, Pickle, Capybara)

Je recherche une application open source assez récente qui utilise Rspec 2 comme bibliothèque de test. J'aimerais voir comment un développeur expérimenté utilise correctement la bibliothèque pour tester la pile complète, car je suis constamment dans le doute concernant mes propres connaissances (venant de testunit et en partie à cause de la documentation plutôt rare de la dernière version de Rspec, même si elle est constamment améliorée).

Si un projet utilisait Cucumber, Pickle et/ou Capybara ainsi que Rspec 2, je sauterais de joie.

Des conseils ?

Santé !

54voto

Nerian Points 6733

Mes 2 centimes :

Utiliser du steak à la place du concombre. C'est RSpec à la base, c'est simple et ça fait l'affaire.

https://github.com/cavalle/steak

Capybara vous permet d'utiliser différents pilotes. Certains pilotes supportent le javascript, fonctionnent avec un navigateur, sont plus rapides, plus lents, etc. Utilisez le meilleur pilote pour les spécifications que vous testez avec Swinger :

https://github.com/jeffkreeftmeijer/swinger

J'utilise ma propre version d'Akephalos - un pilote - qui est rapide, supporte javascript, UTF-8 (c'est ce que ma version ajoute) et ne nécessite pas de navigateur externe.

https://github.com/Nerian/akephalos2

Une bonne pratique pour RSpec est d'utiliser "Context". Demandez-moi si vous avez besoin d'éclaircissements. Prenez également note de l'utilisation de l'élément laisser méthode. Elle renvoie ce que le bloc renvoie. Elle est utile pour déclarer un objet fictif à l'intérieur et l'utiliser sur les échantillons. .

feature "Course" do

  let(:school) {School.make!}

  context "Loged in" do
    before(:each) do
      switch_to_subdomain(school)
    end

    context "In the new course form" do
      before(:each) do
        click_link("Courses")
        click_link("New course")
      end

      scenario "New course" do               
      end

      scenario "A Course without name should not be accepted" do
      end

      scenario "A new course should not be created if there is another one with the same name in the same school" do
      end
    end
  end  
end   

Le livre aussi : The RSpec Book, de Pragmatic Programmers est une très bonne ressource pour s'initier aux concepts de base derrière RSpec, Capybara, Cucumber et tous ces trucs agiles de Behaviour Driven Development :)

Editer :

J'utilise également Machinist2 pour les montages. https://github.com/notahat/machinist

Fonctionne très bien. Mieux que la fille de l'usine.

Il y a aussi Fabricator, qui dispose d'un excellent site web et d'une DSL très utilisable.

https://github.com/paulelliott/fabrication

Vous pouvez utiliser Machinist avec Forgery pour créer des données intelligentes.

https://github.com/sevenwire/forgery

 School.blueprint do
    name { "Pablo de olavide"}
 end

 Student.blueprint do
    first_name { Forgery::Name.first_name}
    last_name { Forgery::Name.last_name }
    school { School.make! }
 end

Vous pouvez combiner cela avec une tâche Thor afin d'alimenter votre base de données de développement, pour voir l'application telle que l'utilisateur final la verrait.

def populate        
    require File.expand_path('config/environment.rb')
    require File.expand_path('spec/support/blueprints.rb')        
    drop
    puts "populating database"
    1.times do |num|
       school = School.make!
       50.times do
       Student.make!(:school => school)

       end                                             
    5.times do        
       Course.make!(:school => school)          
       Professor.make!(:school => school)                
       end            
    end
end

La documentation de RSpec 2 contient de nombreux exemples :

http://relishapp.com/rspec

Ce billet donne également de nombreux autres conseils :

http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/

Un autre article avec de très bons conseils :

http://flux88.com/2011/05/dry-up-your-rspec-files-with-subject-let-blocks/

Optimiser le temps d'exécution des tests :

http://blog.leshill.org/blog/2011/10/23/fast-specs.html

http://jeffkreeftmeijer.com/2011/spec-helpers-bundler-setup-faster-rails-test-suites/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X