Mis 2 centavos:
Uso filete en lugar de pepino. Tiene RSpec en su núcleo, es simple y cumple su función.
https://github.com/cavalle/steak
Carpincho le permiten utilizar diferentes conductores. Algunos conductores soporta JavaScript, correr con un navegador, más rápido, más lento, etc. Utilice el mejor controlador para la especificación que se está probando el uso de Swinger:
https://github.com/jeffkreeftmeijer/swinger
uso mi propio tenedor de Akephalos - un conductor - el cual es rápido, admite Javascript, UTF-8 (eso es lo que agrega mi tenedor) y no necesita un navegador externo.
https://github.com/Nerian/akephalos2
Una buena práctica para RSpec es utilizar el 'contexto'. Pregúntame si necesitas una aclaración. Además, tome nota del método let. Devuelve lo que devuelve el bloque. Es útil para declarar un objeto simulado dentro y usarlo en las muestras. .
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
Además, el libro: El libro RSpec, de programadores pragmáticos es un recurso muy bueno para iniciar mismo acerca de los conceptos básicos detrás de RSpec, capibara, pepino y todo esto Comportamiento Driven Development cosa ágil :)
Edit:
Además, utilizo Machinist2 para los accesorios. https://github.com/notahat/machinist
Funciona muy bien. Mejor que la chica de fábrica.
También hay fabricantes, que tienen un excelente sitio web y un DSL muy útil.
https://github.com/paulelliott/fabrication
Puede utilizar maquinista de falsificación con el fin de crear datos inteligentes.
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
Esto se puede combinar con una tarea Thor con el fin de poblar la base de datos de desarrollo, para ver la aplicación que el usuario final sería verlo.
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 documentación de RSpec 2 tiene muchos ejemplos:
http://relishapp.com/rspec
Además, este post dan muchos otros consejos:
http://eggsonbread.com/2010/03/28/my-rspec-best-practices-and-tips/
Otro post con muy buen consejo:
http://flux88.com/2011/05/dry-up-your-rspec-files-with-subject-let-blocks/
Optimizar el tiempo de ejecución de pruebas:
http://blog.leshill.org/blog/2011/10/23/fast-specs.html
http://jeffkreeftmeijer.com/2011/spec-helpers-bundler-setup-faster-rails-test-suites/
Muchísimas gracias por la entrada! Actualmente estoy usando Factory Girl pero creo que podría darle una oportunidad a Machinist en un futuro cercano. – polarblau
... He leído sobre Steak y parece más cercano a mi propio "estilo" (¿verdad?), Pero me gustaría usar Cucumber una vez en un proyecto completo para obtener una mejor impresión. También pensé en comprar el libro de RSpec, gracias por la pista, ¡creo que podría ir por eso! Y definitivamente voy a probar "contexto". Gracias de nuevo. - Sin embargo, ¿alguien con algún proyecto abierto podría echar un vistazo? – polarblau
Verá, un lugar realmente bueno para ver las especificaciones de RSpec2 hechas por los maestros es el repositorio git RSpec2 mismo :) Pepino: https://github.com/dchelimsky/rspec/tree/master/features y RSpec; https://github.com/dchelimsky/rspec/tree/master/spec – Nerian