2010-07-08 13 views
17

Sto scrivendo un'app Web che viene utilizzata come SaS. Ogni cliente ha la propria directory db e app, quindi ho un'attività rake che crea tutti i dati minimi necessari (seed) per eseguire il loro sito web: diritti e ruoli predefiniti, un utente superadmin, una tabella "us_states" già popolata, alcuni depositi locali e terminali (è un'app logistica).Dati dei semi nei test di cetriolo

Non ho alcuno scenario di cetrioli e ho appena iniziato a costruirne alcuni. Sono alle prime armi con il cetriolo.

Prima ho messo quell'attività di seed data in una linea Given, ma questo è praticamente un dato per tutti gli scenari, e non ha molto senso per i non programmatori che guardano gli scenari (per gli umani, è un tale dato che non ha bisogno di essere espresso consapevolmente) così l'ho spostato in hooks.rb.

mio primo scenario si presenta così:

 
    1 Feature: Place an order 
    2 In order to keep orders in the database 
    3 As a admin 
    4 I want to place orders 
    5 
    6 Scenario: Using common legs 
    7 Given I have 1 customers 
    8 And I'm on the homepage 
    9 And I follow "Place an Order" 
10 When I select the customer 
11 And I select the SSLine 
12 And I click "Use Common Legs" 
13 Then I should see "PICKUP AT" 
14 And I should see "DELIVER TO" or "LOAD AT" 
15 And I should see EMPTY RETURN 

mio hooks.rb si presenta così:

1 Before do 
2 MinimumData.new('costi', '1234').populate #username and password 
3 end 

Domande:

  1. non voglio correre questo MinimumData. compila attività prima di ogni scenario perché impiega 8 secondi. Dovrei farlo funzionare solo una volta, globalmente? Come?
  2. Devo pulire il database con un After.do? Io davvero non voglio farlo, perché duplicherò la logica in After.do, solo con le istruzioni Model.delete_all. Ho notato che dopo la mia prima esecuzione, il test db ha tutti i dati ancora dentro. Posso eliminarlo con rake db: test: spurgare e reinizializzarlo. È una buona pratica?

risposta

22

Non so di un equivalente before(:all) in cetriolo. Che cosa si potrebbe fare è aggiungere il tuo seme in un file di dire features/support/seeds.rb e poi nella parte superiore del vostro features/support/env.rb e sotto la linea che richiede la vostra environment.rb messo la riga:

require File.dirname(__FILE__) + '/seeds' 

o in alternativa

#just write the code you want to execute directly into the env.rb file 

Questi sono i blocchi disponibili per aggiungere nella env.rb

Before do 
    #this code is run before each scenario 
end 

after do 
    #this code is run after each scenario 
end 

at_exit do 
    #this code is run at the end 
end 
+1

"prima di fare" dovrebbe essere writte "Prima di fare", a partire da un carattere maiuscolo – 0x4a6f4672

3

Geoff Lanotte ha la risposta. Ho solo aggiunto un collegamento alla pagina wiki di Cucumber su hooks che descrive questi e altri esempi.

+0

e qui ho pensato che mi veniva intelligente! :) Grazie! –

7

Una correzione alla risposta di Geoff Lanotte. Dovrebbe essere

 
Before do 
    # this code is run before each scenario 
end 

con la B maiuscola

Invece di mettere questo tipo di codice nel file env.rb, tuttavia, si consiglia di metterlo in un nuovo file nella funzionalità/supporto directory, ad es un file "hooks.rb". Questo perché il file env.rb viene rigenerato automaticamente se si aggiorna cetriolo-rails.

Maggiori informazioni qui: https://github.com/cucumber/cucumber/wiki/Hooks

Problemi correlati