2011-02-09 16 views
6

Ho avuto questo problema Cucumber scenarios for extremely long work flowCucumber Background e persistenti scenari (o prerequisiti)

E ora sto scrivendo scenari isolate per ciascuno di una lunga serie di multi-part passi forma. Ho una sezione Background che imposta ogni Scenario. Ma ora, quando eseguo l'intera funzione, cetriolo desidera ripetere lo Background per ogni Scenario. Voglio testare un Scenario che si basa su tutti i precedenti.

Ecco la nuda profilo di che cosa la mia caratteristica assomiglia:

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 

è che ci sono modo per richiedere scenari precedenti da eseguire? E c'è un modo di eseguire il Background solo una volta?

+1

Penso che potresti rendere le cose più difficili su di te di quanto debbano essere. Quelli che hai elencato come scenari mi leggono invece come passi in uno scenario. Come Pan menzionato sulla risposta alla domanda a cui ti colleghi, i tuoi scenari dovrebbero essere autonomi e non avere dipendenze tra loro in questo modo. Se fossi in me, ridurrei lo sfondo e gli scenari in una piccola manciata (i 3 alla fine probabilmente diventerebbero ciascuno uno scenario) e userei passaggi di livello più alto come "Dato Steve ha completato la sottomissione del manoscritto" e avere verifiche in quelli per assicurarsi che ogni passaggio funzionasse. –

+0

Questi scenari sono, per la maggior parte, autonomi. Credimi, questi scenari non sono brevi. Ho già centinaia di passaggi. La combinazione di questi rende più difficile la lettura e meno autosufficiente. Ho effettuato il refactoring ovunque potessi spostare i passaggi di uso comune nei file di definizione passo. Quello di cui ho veramente bisogno è un modo per bloccare il database dopo l'esecuzione di una funzione e quindi caricarlo prima della prossima funzione dipendente. –

+0

Il modo in cui funziona la nostra applicazione è che c'è un lungo flusso di lavoro per un autore, poi un altro per un revisore e un altro per il processo di revisione. Ogni flusso di lavoro dipende dalle condizioni impostate dal precedente. Ho già un sacco di infissi e fabbriche che caricano i dati, ma quello di cui ho bisogno è una fabbrica che crei tutti i modelli contemporaneamente. Non voglio ripetere le funzioni A e B ogni volta che ho bisogno di testare la caratteristica C. –

risposta

2

Ho deciso di "bloccare" l'applicazione nello stato in cui si trovava immediatamente dopo l'esecuzione della funzione. L'ho fatto aggiungendo ganci che scaricano e caricano il databse.

In features/support/hooks.rb ho:

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 

Questo è il lavoro in fondo, ad eccezione del @load-submission non riesce misteriosamente a eseguire lo scenario, ma il database viene caricato. Quindi devo eseguirlo di nuovo senza il tag. Forse qualcuno può aiutarmi a capirlo.

Problemi correlati