2010-11-09 14 views
8

Quiero ejecutar una prueba que pruebe el orden de los elementos Quiero que la orden sea ascendente por fecha.Orden de elementos de la prueba de pepino en la tabla

Aquí está mi escenario de características de pepino y el paso para la última oración.

Scenario: Order of the events should be Ascending 
    Given I am signed into an account called "Gorilla Tech" as a customer 
    When I follow "Register" 
    And I follow "Events" 
    And I follow "Register new event" 
    Then I should see the header "Use the form below to register a new event" 
    And I fill in "Title" with "Apefest 2010" 
    And I fill in "Event at" with "2010-01-07" 
    And I fill in "Add a note" with "This was truly awesome" 
    Then I press "Create" 
    Then I follow "Register new event" 
    And I fill in "Title" with "Monkeyfest 2010" 
    And I fill in "Event at" with "2010-01-08" 
    And I fill in "Add a note" with "Yeah" 
    Then "Apefest 2010" should appear before "Monkeyfest 2010" 



    Then /"(.*)" should appear before "(.*)"/ do |first_example, second_example| 
    response.body.should =~ /#{first_example}.*#{second_example}/ 
    end 

Realmente tengo dos problemas aquí. El primero es ¿cómo especifico mi prueba correctamente? ¿Puedo especificar mi prueba anterior diferente y más correcta?

Lo que quiero hacer es registrar 2 eventos diferentes en 2 fechas diferentes. El evento aparecerá más tarde como una lista en la página web. Entonces quiero verificar si los eventos están ordenados por fecha. Quiero que el evento con la fecha más reciente aparezca en la parte superior.

aquí está el código con la colección que quiero probar. De alguna manera, quiero verificar si la colección en el siguiente div tiene un orden ascendente por fecha.

<div id="feeds"> 
    <table> 
     <caption><%= t('events.all') %></caption> 
     <thead> 
     <tr> 
      <th><%= Event.t(:title) %></th> 
      <th><%= Event.t(:event_at) %></th> 
      <th></th> 
     </tr> 
     </thead> 
     <tbody> 
     <%= render :partial => 'event', :collection => @events %> 
     </tbody> 
    </table> 
    </div> 

    <%= will_paginate(@events) %> 
+0

Necesitamos más explicará acerca de la verdadera pregunta – shingara

+1

acuerdo con @shingara, ¿qué es lo que le gustaría saber? Además, su escenario aquí es demasiado largo. Probablemente deberías refactorizar esa prueba porque estás probando muchas cosas diferentes en un escenario. –

+0

Cuando registro eventos, registro 2 eventos con 2 eventos diferentes_at. Más tarde quiero verificar si mi registro de eventos se ha ordenado con el evento más nuevo en la parte superior. Eso es lo que trato de comparar con la mesa. El problema es que la prueba solo verifica si la cuenta tiene el evento y no el orden en que se encuentra el evento. Soy muy nuevo en las pruebas de pepino, así que no sé realmente una buena manera de especificar mis pruebas –

Respuesta

13

La forma en que escribió su definición de paso está bien sólo tiene que añadir el interruptor de línea múltiple (m) a su patrón. :)

response.body.should =~ /#{first_item}.*#{second_item}/m 
+0

Haciendo esto tiene un lío de error: método indefinido 'cuerpo 'para nil: NilClass (NoMethodError): S –

+3

¿Está usando capibara o webrat detrás de Pepino? Si el carpincho usará 'página' en lugar de 'respuesta' y puede o no necesitar llamar al método de cuerpo. Si webrat debería funcionar a menos que aún no haya visitado una página. –

+2

page.body.should es lo que necesitas para capibara. – Clinton

4

Tal vez propongo un poco de consolidación a sus pasos mediante el uso de una tabla.

Scenario: Order of the events should be Ascending 
... 
And I fill in "Title" with "Apefest 2010" 
And I fill in "Event at" with "2010-01-07" 
And I fill in "Add a note" with "This was truly awesome" 
Then I press create 

que sugeriría:

Scenario: Order of the events should be Ascending 
... 
When I register a new event: 
| Title | Event at | Add a note | 
| Apefest 2010 | 2010-01-07 | This was truly awesome | 

Su solución actual tiene la compensación de no ser muy precisa, mirando en todo el cuerpo de la respuesta se puede encontrar el texto de un ejemplo en otra ubicación. Sugeriría el uso de XPATH hasta su umbral de dolor o utilizando, estoy asumiendo que usa Watir (o variante), las clases.

Se podría recoger todos los nombres de los eventos de la tabla iterando sobre las filas (y especificando la columna que contiene el nombre del evento, aquí asumo el primero) ...

event_names = $browser.div(:id,"feeds").tables.first.rows.collect {|row| row[0].text} 

Entonces afirmar que los eventos existen y están en el orden deseado dentro de la matriz.

event_names.index(first_example).should_not be_nil 
event_names.index(second_example).should_not be_nil 
event_names.index(first_example).should < event_names.index(second_example) 
+1

¿Cómo afirmo que los eventos están en el orden deseado dentro de la matriz? –

+0

Se agregaron las aserciones para garantizar que estén en la matriz y que estén ordenadas correctamente. – burtlo

0

¿Por qué no usar simplemente el selector nth-child?

page.should have_selector('tbody tr:nth-child(1)', text: first_example) 
page.should have_selector('tbody tr:nth-child(2)', text: second_example) 
Cuestiones relacionadas