ruby on rails - que - Espinaca vs pepino para BDD en rieles
jugo de pepino espinaca y apio (4)
Estoy empezando en BDD. Me preguntaba cuál sería mejor comenzar con pepino o espinaca. Mi impresión es que la espinaca es nueva fuera del bloque. Mira here
Con cuál debería empezar. Los criterios serían:
- Apoyo en todos los ámbitos.
- Flexibilidad de uso.
- Herramienta de terceros e integración de APIs.
Una vez más, podría ser una pregunta ignorante del novato: ¿Dónde encaja la capibara en la imagen?
DESCARGO DE RESPONSABILIDAD: Soy un mantenedor de espinacas.
Si estás empezando con BDD, te recomiendo dos libros:
Creo que es importante aprender todo el proceso de BDD y TDD (fuera-en, etc.) y luego elegir la herramienta con la que se sienta más cómodo.
Dicho esto, Cucumber tiene una gran comunidad, pero muchas cosas también son aplicables a la espinaca, ya que lo que tienen en común es Gherkin.
En cuanto a la flexibilidad de uso, diría que ambos son realmente flexibles, pero (obviamente) prefiero la espinaca, ya que cada característica es solo una clase de Ruby, donde puede incluir módulos, heredar de otras clases, etc. (esto también se aplica a la integración de API) .
Si lo desea, puede echar un vistazo a la spinach-rails-demo y ver cómo funciona todo.
En algún contexto, he sido un usuario de Cucumber durante mucho tiempo, pero siempre he deseado que fuera Spinach desde el primer día. Estoy cambiando todos mis proyectos a Spinach a pesar de sus deficiencias porque utiliza la nueva técnica PORO de hot-off-the-block (Plain Old Ruby Objects;). Ahora puedo expandir mis pasos como quiera, porque es solo Ruby.
Para responder a su pregunta, a partir de este escrito:
- Apoyo en todos los ámbitos.
Pepino
La espinaca aún está desarrollando algunas funciones, incluidos los bloques ''Fondo'', y actualmente estoy intentando que reconozca las tablas.
- Flexibilidad de uso.
Espinacas
Pepino fomenta el diseño de los pasos malos desde el principio, OMI. Si crea pasos específicos para cada función, los pasará por alto más adelante, y si crea pasos globales reutilizables, sus definiciones de características serán largas, genéricas y aburridas de leer. He escuchado a personas decir que pueden caminar un equilibrio con éxito y ser lo suficientemente específicas pero que aún tienen pasos reutilizables; Me considero lo suficientemente versado que si no puedo hacerlo de manera confiable, es demasiado difícil.
- Herramienta de terceros e integración de APIs.
Pepino, suponiendo que el punto de bala podría interpretarse como comunidad.
Si lo que realmente buscas son "herramientas de terceros e integración de API", Spinach admite capybara y rspec, que es la mayoría de lo que buscas. Pepino tiene bibliotecas de pasos reutilizables de terceros, pero como se señaló en mi punto anterior, creo que esto es malo. Con respecto a la tercera parte y las integraciones, incluso si aún no está allí, realmente no hay nada mejor que los objetos de rubí viejos y sencillos.
¿Dónde encaja la capibara en la imagen?
Capybara es su interfaz de prueba para su sitio, también conocido como mouse y teclado de prueba. Podría iniciarlo en una consola y manejar su aplicación, pero eso se volvería repetitivo. Cucumber / Spinach (o rspec / test-unit / minitest) todos podrían usar capibara para automatizar las pruebas de su aplicación. La gente prefiere Cucumber / Spinach porque te ayudan a salir del código por un momento para pensar como un usuario.
En general, probablemente sería mejor obtener un libro de rspec / cucumber y hacer lo que dice. Solo ten en cuenta que las pruebas toman un tiempo para ser bueno, así que no te detengas ahí. Tal vez echa un vistazo a la espinaca en algún lugar del proceso; Si te gusta el pepino, es posible que te guste la espinaca.
Realmente no puedo hablar por Spinach, ya que nunca lo he usado, pero Cucumber definitivamente tiene un gran soporte comunitario con muchas bibliotecas externas.
Capybara te permite probar fácilmente aplicaciones web
When I fill in "username" with "foo"
And I click on "login"
Then I should see "enter your password"
Si está atascado con Cucumber y no quiere pasos globales, puede solucionar el problema etiquetando los pasos con algún tipo de ID de escenario:
# features/1_greetings.feature
Scenario: Formal greeting
Given I have an empty array [#1]
And I append my first name and my last name to it [#1]
When I pass it to my super-duper method [#1]
Then the output should contain a formal greeting [#1]
El ID de escenario # 1 puede ser cualquier valor. Me gusta usar números de boleto para futuras referencias.
A continuación, puede colocar todos los pasos en un archivo de definición de paso. Está lo suficientemente cerca de la apariencia de Spinach :: FeatureSteps. No hay argumentos regex también!
# features/step_definitions/1_greetings.rb
Given ''I have an empty array [#1]'' do
#...
end
And ''I append my first name and my last name to it [#1]'' do
#...
end
When ''I pass it to my super-duper method [#1]'' do
#...
end
Then ''the output should contain a formal greeting [#1]'' do
#...
end