¿Cuál es la diferencia entre RSpec y pepino? [cerrado]

114

Tengo 6 meses de experiencia en el desarrollo de Rails. Creé una aplicación web que está en uso ahora con autenticación y autorización y postgresql db.

Pasaré a mi segunda aplicación Rails, pero esta vez, después de las lecciones aprendidas, me gustaría desarrollarla usando TDD, ya que noté que es mucho más fácil escalarla y corregir errores. Se desarrolla lentamente, pero a la larga es mucho más fácil de manejar.

He oído hablar de Rspec y Cucumber pero estoy completamente confundido por ellos.

Me gustaría saber cuál es la diferencia entre RSpec y Cucumber y para qué se utilizan.

También sería útil saber si, desde la perspectiva de un principiante (que también es el único desarrollador) si realmente se necesita un marco de prueba.

rey bandido
fuente
6
Para confundirte aún más, Minitest también podría ser una opción
lucas clemente
5
Capybara es realmente un controlador que se puede usar en cualquiera de los marcos de prueba, no un marco en sí mismo. Watir-webdriver y Selenium son dos cosas que hacen funciones similares, pero manejan un navegador real y son mucho más lentas que Capybara conduciendo Rack :: Test
DVG
37
¿Cómo no es esto constructivo ???
Jason Swett
19
Gran pregunta y gran respuesta. Es justo lo que necesitaba. Estoy desconcertado por el cierre de la pregunta como no constructivo. ¿A quién le importa si va a generar debate? Para eso está la votación comunitaria.
dpurrington
14
Votar para reabrir ya que creo que las bases para cerrar la pregunta son engañosas. Definitivamente se puede (¡y ha sido!) Respondida usando "respaldado por hechos, referencias o experiencia", y cualquier pregunta de StackOverflow posiblemente "solicitará debate, argumentos, encuestas" (que todos conocemos y hemos visto). ¿En cuanto a "sondeo"? El modus operandi de quién de SO se trata de votar a favor y en contra de preguntas y respuestas. Básicamente es una gran encuesta. Cerrar esto fue una tontería. Es una pregunta y respuesta muy útil sobre el tema .
Adam Cameron

Respuestas:

323

RSpec y Cucumber son ambos marcos de prueba. RSpec incluye pruebas unitarias tradicionales (lo que significa probar una clase o parte de la aplicación de forma aislada del resto de la aplicación. Entonces, su modelo hace lo que se supone que debe hacer su modelo, el controlador hace lo que se supone que debe hacer, etc.).

RSpec y Cucumber se utilizan para las pruebas de aceptación (que se denominan ATDD, BDD, especificación por ejemplo, etc., según a quién le pregunte). Estas son pruebas de integración impulsadas por casos de negocios, lo que significa que simulan la forma en que un usuario usa la aplicación y usa la pila completa de Rails, por lo que los problemas con la forma en que las diferentes partes de su aplicación funcionan juntas se pueden encontrar de una manera que las pruebas unitarias no lo harán. encontrar.

La principal diferencia entre RSpec y Cucumber es el factor de legibilidad empresarial. El atractivo principal de Cucumber es que la especificación (características) están separadas del código de prueba, por lo que los propietarios de sus productos pueden proporcionar o revisar la especificación sin tener que buscar en el código. Estos son los archivos .feature que crea en Cucumber. RSpec tiene un mecanismo similar, pero en su lugar usted describe un paso con un bloque Describe, Context o It que contiene la especificación comercial, y luego tiene inmediatamente el código que ejecuta esa declaración. Este enfoque es un poco más fácil de trabajar para los desarrolladores, pero un poco más difícil para las personas sin conocimientos técnicos.

¿Cuál usar? Si usted es el único desarrollador y propietario del producto, entonces me quedaría con RSpec, creo que es más fácil de entender para una persona técnica, ofrece algunas ventajas para mantener las cosas bajo control y dentro del alcance, y evita que se meta en las expresiones regulares para la prueba. pasos. Si está construyendo esto para un cliente y ellos son prácticos con respecto a la Especificación, elija Cucumber para su Prueba de aceptación y use RSpec para Pruebas unitarias.

Solo para demostrar la principal diferencia entre los dos:

Pepino:

#articles.feature
Given an article exists called "Testing Demonstration"
When I visit the list of articles
Then I should see an article called "Testing Demonstration"

#article_steps.rb
Given /^an article exists called "(.+)"$/ do |title|
  FactoryGirl.create(:article, title: title)
end 
When /^I visit the list of articles$/ do
  visit articles_path
end
Then /^I should see an article called "(.+)"$/ do |title|
  page.should have_content title
end

Rspec

describe "Articles" do
  let(:article) { FactoryGirl.create(:article) }
  context "Index Page" do
    before { visit articles_path }
    it { page.should have_content article.title }
  end
end

Esta serie de blogs es excelente para comenzar con RSpec.

DVG
fuente
24
Esta es una excelente respuesta. Muchas gracias por su tiempo y sus consejos. Hay muchos libros sobre rieles que he leído, pero hasta ahora no he encontrado uno que haga este tipo de distinciones y explique cuál es cuál. Gracias de nuevo
banditKing
2
No podría recomendar esta respuesta a nadie que la necesite. ¡Gracias por los detalles!
Ikon
3
Esta es de hecho una de las respuestas más completas y fáciles de entender sobre stackoverflow (¡con un gran ejemplo!)
Sheharyar