2011-02-09 9 views
6

que tenían este problema Cucumber scenarios for extremely long work flowpepino y persistentes escenarios (o requisitos previos)

Y ahora que he estado escribiendo escenarios aislados para cada uno de una larga serie de pasos de forma de varias partes. Tengo una sección Background que configura cada Scenario. Pero ahora cuando ejecuto la función completa, pepino quiere repetir el Background por cada Scenario. Quiero probar un Scenario que se basa en todos los anteriores.

Aquí está el esbozo de lo que mi función será similar a:

Feature: Submit a manuscript 
    In order to complete a manuscript submission 
    As a corresponding author 
    I want to complete the to-do list 

    Background: 
    Given I am logged in as "Steve" 
    And an article_submission "Testing Web Apps" exists 
    And "Steve" is a "Corresponding Author" for "Testing Web Apps" 
    And I am on the manuscript to-do list page for "Testing Web Apps" 

    Scenario: Steve suggests reviewers for his manuscript 
    ... 
    Scenario: Steve completes the manuscript fees to-do item 
    ... 
    Scenario: Steve wants to add Barbara as a co-author 
    ... 
    Scenario: Steve uploads necessary files 
    ... 
    Scenario: Steve edits the fees page and general information page 
    ... 
    Scenario: Steve re-uploads the manuscript file 
    ... 
    Scenario: Steve completes the Copyright Transfer 
    ... 
    Scenario: Steve completes Author Responsibilities & Agreement 
    ... 
    # These scenarios depend on all the previous ones having run 
    Scenario: Steve Completes submission 
    ... 
    Scenario: Steve goes back and make changes 
    ... 
    Scenario: Steve fills out payment page 

es que hay manera de requerir escenarios anteriores para ser ejecutado? ¿Y hay una forma de ejecutar el Background solo una vez?

+1

Creo que puede estar haciendo las cosas más difíciles para usted de lo necesario. Lo que ha enumerado como escenarios me lo leen como pasos en un escenario en su lugar. Como Pan mencionó en la respuesta a la pregunta a la que se vincula, sus escenarios deben ser independientes y no tener dependencias entre ellos de esta manera. Si fuera yo, colapsaría el fondo y los escenarios en un puñado pequeño (los 3 al final probablemente se convertirían en 1 escenario) y usaría pasos de nivel más alto como "Dado que Steve ha completado la presentación del manuscrito" y verificaciones en aquellos para asegurarse de que cada paso funcionó. –

+0

Estos escenarios son, en su mayor parte, autónomos. Créame, estos escenarios no son cortos. Ya tengo cientos de pasos. Combinarlos hace que sea más difícil de leer y menos autónomo. He rediseñado siempre que pude para mover los pasos comúnmente utilizados en los archivos de definición de pasos. Lo que realmente necesito es una forma de congelar la base de datos después de que se ejecute una característica y luego cargarla antes de la siguiente función dependiente. –

+0

La forma en que funciona nuestra aplicación es que hay un flujo de trabajo largo para un autor, luego otro para un revisor y otro para el proceso de revisión. Cada flujo de trabajo depende de las condiciones establecidas por el anterior. Ya tengo muchos accesorios y fábricas cargando datos, pero lo que necesito es una fábrica que cree todos los modelos a la vez. No quiero repetir la Característica A y B cada vez que necesito probar la Función C. –

Respuesta

2

Decidí "congelar" la aplicación en el estado en que estaba inmediatamente después de ejecutar la característica. Hice esto agregando ganchos que vuelcan y cargan el databse.

En features/support/hooks.rb que tengo:

After('@complete-submission') do 
    # Dump the database 
    exec "mysqldump -u root --password=### onc_test > #{Rails.root}/support/submission.sql" 
end 

Before('@load-submission') do 
    # Load the database 
    exec "mysql -u root --password=### onc_test < #{Rails.root}/support/submission.sql" 
end 

Esto está trabajando básicamente, a excepción de la falla @load-submission misteriosamente para ejecutar el escenario, pero se carga la base de datos. Así que tengo que ejecutarlo de nuevo sin la etiqueta. Tal vez alguien me puede ayudar a entender eso.

Cuestiones relacionadas