2011-08-03 37 views
5

Soy nuevo en las pruebas de pepino.Características y definiciones del paso del pepino

he creado dos archivos características:

events.feature 
partner.feature 

y tienen mis definiciones paso en una carpeta step_definitions:

./step_definitions/ 
    events.rb 
    partner.rb 

Parece que el pepino se ve en todos los archivos .RB por la información paso .

¿Hay alguna forma de restringir la función para ver un archivo de definición de paso específico?

La razón de por qué quiero hacer esto, es porque obtengo errores de coincidencia ambiguos, incluso cuando uso la bandera --guess.

La razón de por qué quiero hacer esto es por las siguientes razones. Estoy probando un CMS, y quiero probar cada uno de los diferentes tipos de contenido (eventos & socios) en funciones separadas.

events.feature

Feature: Add partner 
    As an administrator I can add a new partner 

    Scenario: Create partner 
    Given I am logged in 
    When I create a partner 
    Then I should see content 

partner.feature

Feature: Add event 
    As an administrator I can add a new event 

    Scenario: Create event 
    Given I am logged in 
    When I create an event 
    Then I should see content 

sólo se centra en el 'entonces yo debería ver el contenido', que es en ambos escenarios, el error se produce porque en los archivos .RB necesito incluir:

partners.rb

Then /^I should see content$/ do 
    BROWSER.html.should include('SOME PARTNER CONTENT') 
end 

events.rb

Then /^I should see content$/ do 
    BROWSER.html.should include('SOME EVENT CONTENT') 
end 

que significa que hay una coincidencia ambigua de "Debería ver el contenido".

entiendo que hay diferentes maneras de estructurar este, es decir, que podría crear una característica de contenido y utilizar escenario esboza:

Feature: Add content 
    As an administrator I can add a new content 

    Scenario Outline: Create content 
    Given I am logged in 
    When I create an <content type> 
    Then I should see <example content> 

    Examples: 
    |event |March Event | 
    |partner |Joe Blogs | 

Pero no quiero hacer esto porque quiero encapsular cada contenido escriba su propia característica de prueba.

Así que, esencialmente, tengo que encontrar la forma de ejecutar archivos de pasos específicos de acuerdo con la función que estoy probando.

Respuesta

9

Pepino siempre carga todos los archivos y no creo que haya una manera de anular este comportamiento.Con respecto a su problema con los pasos ambiguos - la solución es fácil - añadir parámetros a sus pasos

Then /^(?:|I)should see "([^"]*)"$/ do |text| 
    page.should have_content(text) 
end 

Y en escenarios simplemente llamarlo como esto

Entonces debería ver "contenido de socios"

  • bonificación gratuita: su escenario ahora es mucho más legible
+0

Estoy de acuerdo con esta manera. Es mucho más expresivo también, como deberían ser tus pasos. –

1

No veo nada de malo en el enfoque alternativo que sugirió. Separar las definiciones de paso en dominios lógicos tiene sentido. Sin embargo, parece que intentas llevarlo demasiado lejos, y eso generará una gran cantidad de códigos duplicados y problemas con coincidencias ambiguas como las que estás viendo ahora. Yo recomiendo hacer algo como esto:

Feature: Add partner 
    As an administrator I can add a new partner 

    Scenario: Create partner 
    Given I am logged in 
    When I create a partner 
    Then I should see "partner content" 

Y, del mismo modo, en su función de evento:

... 
Then I should see "event content" 

Posteriormente, se podría lo siguiente en un archivo separado step_definitions/common_steps.rb:

Then /I should see "(.*)"$/ do |content| 
    BROWSER.html.should include(content) 
end 

Este paso no tiene nada asociado/evento específico al respecto. En cambio, los escenarios contienen cadenas de datos específicos para sus características.

Si está trabajando en una aplicación de Rails, la gema cucumber-rails realmente creará una serie de pasos comunes para la prueba de aplicaciones web para usted. Incluso si no está utilizando Rails, podría ser útil echar un vistazo a algunos de estos steps.

+0

Sí, veo tu punto sobre el código duplicado, gracias. – JonB

0

He estado buscando esto, pero parece que no es posible "de fábrica".

Mi solución es diferenciar pasos siempre utilizando algún tipo de descripción adicional, como el nombre de la clase, por ejemplo:

Scenario: Buildings List 
    Given I have a Building with code "B1" 
    And I have a Building with code "B2" 
    When I go to the list of buildings 
    Then I should see "B1" building code 
    And I should see "B2" building code 

Estos "código de construcción" descripciones son todo lo que no es necesario volver a utilizar pasos entre diferentes archivos/dominios.

Cuestiones relacionadas