ruby - taxonomia - Rails: ¿Buen uso del ejemplo Rspec2?(También: Pepino, Pepinillo, Capibara)
taxonomia del pepino (1)
Estoy buscando una aplicación de código abierto bastante reciente que use Rspec 2 como biblioteca de prueba. Me gustaría ver cómo un desarrollador experimentado utiliza la biblioteca correctamente para probar la pila completa, ya que tengo dudas constantemente sobre mi propio conocimiento (proveniente de Testunit y en parte debido a la documentación bastante escasa de la última versión de Rspec, incluso aunque se mejora constantemente).
Si un proyecto usara Cucumber, Pickle y / o Capybara junto con Rspec 2, me harías saltar de alegría.
Cualquier punteros?
¡Aclamaciones!
Mis 2 centavos:
Use bistec en lugar de pepino. Es RSpec en su base, es simple y hace el trabajo.
https://github.com/cavalle/steak
Capibara le permite utilizar diferentes controladores. Algunos controladores admiten javascript, se ejecutan con un navegador, más rápido, más lento, etc. Utilice el mejor controlador para la especificación que está probando con Swinger:
https://github.com/jeffkreeftmeijer/swinger
Utilizo mi propio fork de Akephalos - un controlador - que es rápido, soporta javascript, UTF-8 (eso es lo que mi fork agrega) y no necesita un navegador externo.
https://github.com/Nerian/akephalos2
Una buena práctica para RSpec es usar ''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 muy buen recurso para iniciarte sobre los conceptos centrales detrás de RSpec, Capybara, Cucumber y todo lo ágil de desarrollo impulsado por el comportamiento :)
Editar:
Además, uso Machinist2 para los accesorios. https://github.com/notahat/machinist
Funciona genial. Mejor que Factory girl.
También está Fabricator, que tiene un sitio web excelente y un DSL muy útil.
https://github.com/paulelliott/fabrication
Puede utilizar Machinist con Forgery para 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
Puede combinar esto con una tarea de Thor para poblar su base de datos de desarrollo, para ver la aplicación como lo vería el usuario final.
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:
Además, este post da 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/
Optimizando el tiempo de ejecución de las pruebas:
http://blog.leshill.org/blog/2011/10/23/fast-specs.html
http://jeffkreeftmeijer.com/2011/spec-helpers-bundler-setup-faster-rails-test-suites/