Empezando con el pepino

Una función de pepino

Cucumber usa sintaxis de Gherkin para describir los comportamientos de su software en lenguaje natural estructurado.

Como tal, Cucumber no es un marco de prueba (un malentendido común), sino un marco de documentación del sistema, no muy diferente de otros como Use Case Scenario. El malentendido común se debe al hecho de que la documentación de Cucumber puede automatizarse para garantizar que refleje el comportamiento real del sistema.

Un conjunto de documentación de Cucumber se compone de Características, cada una de las cuales describe una característica de su software, escrita en Gherkin y alojada en su propio archivo. Al organizar esos archivos en una estructura de directorios, puede agrupar y organizar funciones:

  • banca/
  • función de retiro
  • función de cajero automático
  • característica de préstamo personal
  • comercio/
  • portfolio.feature
  • función intradía
  • hipoteca/
  • evaluación.característica
  • función de contabilidad

Cada ‘Característica’ es un archivo de texto sin formato compuesto por una sección introductoria opcional, no estructurada y puramente informativa y uno o más ‘Escenarios’, cada uno de los cuales representa una condición de uso o un caso de uso.

Ejemplo:

Feature: Documentation
As a StackOverflow user or visitor
I want to access the documentation section
    
    Scenario: search documentation on Stack Overflow
        Given I am on StackOverflow
        And I go to the Documentation section
        When I search for "cucumber"
        And I follow the link to "cucumber"
        Then I should see documentation for "cucumber"

Cada línea que comienza con Dado, Cuando, Y, Pero o Entonces se llama un ‘Paso’. Cualquier paso puede comenzar con cualquiera de esas palabras sin importar el orden, pero lo convencional es usarlas de la manera más natural posible.

Las características también se pueden organizar a través de “Etiquetas”, anotaciones que el editor puede poner en una “Característica” o un “Escenario” para categorizarlo aún más.

La ejecutabilidad de una característica se logra a través del código glue que se puede escribir en muchos lenguajes diferentes (Java, Ruby, Scala, C/C++): cada ‘Paso’ se compara con el código de ‘pegamento’ para identificar las ‘Definiciones de pasos’ (comúnmente abreviadas a StepDef) a través de expresiones regulares.

Cada ‘Paso’ puede tener solo una ‘Definición de Paso’ asociada.

Cuando se ejecuta una ‘Característica’, se ejecuta cada ‘Escenario’ que lo compone, lo que significa que se ejecuta cada StepDef que coincida con los ‘Pasos’ en cada ‘Escenario’.

Una definición de paso de Cucumber en Ruby

En características/paso_definiciones/documentación.rb:

When /^I go to the "([^"]+)" documentation$/ do |section|
  path_part =
    case section
      when "Documentation"
        "documentation"
      else
        raise "Unknown documentation section: #{section}"
    end
  visit "/documentation/#{path_part}/topics"
end

Then /^I should see the "([^"]+) documentation"$/ do |section|
  expect(page).to have_css('h2.doctag_title a', text: section)
end

Estos pasos ejercitan una aplicación web. Son tan simples como pueden ser sin dejar de ser prácticos.

Cada paso comienza con una palabra clave Gherkin, que en un archivo de definición de pasos es un método que registra un paso con Cucumber. El método de definición de pasos toma una expresión regular, que coincide con una línea en un escenario, y un bloque, que se ejecuta cuando el escenario llega a una línea coincidente. Los grupos de captura en la expresión regular se pasan al bloque como parámetros de bloque.

El paso When tiene un ejemplo simple y en línea de pasar de una referencia legible por humanos a una página (“Documentación”) a una URL. Las suites Real Cucumber suelen poner esta lógica en un método separado. El método visit lo proporciona Capybara. No se requiere que Carpincho use Cucumber, aunque se usa muy comúnmente con él. visit le dice al navegador controlado por Capybara que visite la URL dada.

El paso Entonces muestra cómo se puede probar el contenido de una página. expect/to es proporcionado por RSpec (nuevamente, Cucumber no lo requiere, pero se usa muy comúnmente con él). have_css es proporcionado por Capybara. La expectativa es que el selector CSS dado coincida con un elemento en la página que contiene el texto dado. Tenga en cuenta que esta expectativa fallaría si la solicitud del navegador hubiera fallado.

Para obtener más ejemplos, consulte el tema “Definición de pasos”.

Instalación de Rubí Puro

Para instalar Cucumber para usar con Ruby simplemente use el comando

gem install cucumber

Alternativamente, si está utilizando un paquete, puede agregar la siguiente línea a su Gemfile

gem 'cucumber'

Y luego ejecuta el paquete

bundle install

[Creo que esto pertenece a su propio tema, Instalación. Creé ese tema y copié este ejemplo allí. Cuando se apruebe ese tema, lo moveré allí y eliminaré la copia.]