La ejecución del terminal muestra los pasos .rb antes de los pasos del escenario .feature.
Descripción del problema:
Estoy teniendo un “problema” al crear automatización de Cucumber con Ruby. Mi terminal muestra los pasos .rb antes que los pasos del escenario .feature, lo cual es realmente molesto para la legibilidad.
Información:
Ruby: 3.0.3p157
Terminal: Git 2.34.1
Cucumber: 7.1.0
Mi archivo de características contiene:
@home_screen
Feature: Pruebas para la funcionalidad de la pantalla de inicio
@default
Scenario: Los valores predeterminados en la pantalla de inicio son Pie y Centímetro
Given Aterrizo en la pantalla de inicio
Then el valor del selector de unidad izquierdo debería ser 'Pie'
And el valor del selector de unidad derecho debería ser 'Centímetro'
Scenario: El botón "Mostrar todo" debería estar habilitado al iniciar
Given Aterrizo en la pantalla de inicio
Then el botón "Mostrar todo" está habilitado
When Presiono el botón "Limpiar"
Then el botón "Mostrar todo" está deshabilitado
@conversions
Scenario Outline: Verificar las conversiones predeterminadas
Given Aterrizo en la pantalla de inicio
When Escribo <target> en el campo destino
Then Debería ver <result> como el resultado
Examples:
| target | result |
| 1 | 12 |
| 2 | 24 |
| 3 | 36 |
| 9 | 106 |
Mis definiciones de pasos contienen:
Given('Aterrizo en la pantalla de inicio') do
puts 'Estoy en la pantalla de inicio'
end
Then('el valor del selector de unidad izquierdo debería ser {string}') do |string|
puts "El valor del selector de unidad izquierdo es #{string}"
end
And('el valor del selector de unidad derecho debería ser {string}') do |string|
puts "El valor del selector de unidad derecho es #{string}"
end
When('Presiono el botón "Limpiar"') do
puts 'Se presionó el botón "Limpiar"'
end
When('Escribo {int} en el campo destino') do |target|
puts "El objetivo es: #{target}."
end
Then(/el botón "Mostrar todo" está (habilitado|deshabilitado)/) do |state|
state == 'habilitado' ? puts('El botón está habilitado') : puts('El botón está deshabilitado')
end
Then('Debería ver {int} como el resultado') do |result|
puts "El resultado es: #{result}."
end
Ejecución en la terminal de un escenario:
Salida esperada:
¡Gracias por tu tiempo!
davy.ai
Solución:
Para solucionar este problema y hacer que la terminal muestre los pasos del escenario .feature antes que los pasos del archivo .rb, puedes agregar la opción
--order rand
a la línea de comandos de Cucumber. Esto hará que el orden de ejecución de los escenarios y pasos sea aleatorio, provocando que los pasos del escenario se muestren antes que las definiciones de pasos.El comando modificado se vería así:
Puedes agregar esta opción a tu Rakefile o script de shell si los utilizas para ejecutar tu suite de pruebas.