2010-07-08 19 views
17

Estoy escribiendo una aplicación web que se utiliza como SaS. Cada cliente tiene su propio directorio de aplicaciones y db, así que tengo una tarea de rake que crea todos los datos mínimos necesarios para ejecutar su sitio web: derechos y roles predeterminados, un usuario de superadmin, una tabla "us_states" ya poblada, algunos depósitos locales y terminales (es una aplicación de logística).Seed data in pepino tests

No tengo ningún escenario de pepino para él y acabo de empezar a construir algunos. Soy un principiante con pepino.

Primero puse esa tarea de datos semilla en una línea dada, pero eso es más o menos lo que se da para todos los escenarios, y no tiene mucho sentido para los no programadores que miran los escenarios (para humanos, es algo así que no necesita ser expresado conscientemente) así que lo moví a hooks.rb.

Mi primer escenario es el siguiente:

 
    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 

Mi hooks.rb se ve así:

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

Preguntas:

  1. no desea ejecutar este MinimumData. poblar tarea antes de cada escenario porque lleva 8 segundos. ¿Debo hacerlo funcionar solo una vez, globalmente? ¿Cómo?
  2. ¿Debo limpiar la base de datos con After.do? Realmente no quiero hacer eso, porque duplicaré la lógica en After.do, solo con las sentencias Model.delete_all. Me di cuenta de que después de mi primera ejecución, la prueba db tiene todos los datos todavía en. Puedo purgarlo con rake db: test: purgar y reiniciarlo. ¿Es eso una buena práctica?

Respuesta

22

No conozco un before(:all) equivalente en pepino. Lo que podría hacer es añadir su semilla en un archivo decir features/support/seeds.rb y luego en la parte superior de su features/support/env.rb y por debajo de la línea que requiere su environment.rb poner la línea:

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

o alternativamente

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

Estos son sus bloques disponibles para añadir en el 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

"antes de hacer" debe ser writte "Antes de hacer", comenzando con una mayúscula – 0x4a6f4672

3

Geoff Lanotte tiene la respuesta. Acabo de pensar que agregaría un enlace a la página wiki de Cucumber en hooks que describe estos y otros ejemplos.

+0

y yo que pensaba que estaba siendo inteligente! :) ¡Gracias! –

7

Una corrección a la respuesta de Geoff Lanotte. Debe ser

 
Before do 
    # this code is run before each scenario 
end 

con un capital B.

En lugar de poner este tipo de código en el archivo de env.rb, sin embargo, es posible que desee ponerlo en un nuevo archivo en su características/soporte directorio, por ejemplo un archivo "hooks.rb". Esto se debe a que el archivo env.rb se regenera automáticamente si actualiza pepino-rieles.

Más información aquí: https://github.com/cucumber/cucumber/wiki/Hooks