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/