2010-11-09 8 views
8

Voglio eseguire un test che verifica l'ordine degli elementi Desidero che l'ordine sia crescente per data.Ordine di prova cetriolo degli elementi nella tabella

Ecco lo scenario della funzione cetriolo e il passaggio per l'ultima frase.

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 

Ho davvero due problemi qui. Il primo è come si specifica il mio test correttamente? Posso specificare il mio test sopra diverso e più corretto?

Quello che voglio fare è registrare 2 eventi diversi in 2 date diverse. L'evento apparirà in seguito come elenco sulla pagina web. Quindi voglio controllare se gli eventi sono in ordine per data. Voglio che l'evento con la data più recente appaia in alto.

questo è il codice con la raccolta che voglio testare. In qualche modo voglio controllare se la raccolta nel div seguente ha un ordine crescente per data.

<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

Abbiamo bisogno di ulteriori spiegazioni sulla vera domanda – shingara

+1

D'accordo con @shingara, che cosa vorresti sapere? Inoltre, il tuo scenario qui è troppo lungo. Probabilmente dovresti refactoring quel test perché stai testando un sacco di cose diverse in uno scenario. –

+0

Quando registro eventi, quindi registro 2 eventi con 2 eventi diversi. Più tardi voglio controllare se gli eventi del mio registro sono stati ordinati con l'ultimo evento in cima. Questo è quello che sto cercando di confrontare con il tavolo. Il problema è che il test controlla solo se l'account ha l'evento e non l'ordine in cui si trova l'evento. Sono molto nuovo al test di cetriolo, quindi non conosco un buon modo per specificare i miei test –

risposta

13

Il modo in cui hai scritto la tua definizione passo va bene è sufficiente aggiungere l'opzione multilinea (m) per il vostro modello. :)

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

In questo modo si è verificato un errore: metodo 'body 'non definito per nil: NilClass (NoMethodError): S –

+3

Stai utilizzando capibara o webrat dietro Cucumber? Se capibara dovresti usare "pagina" invece di "risposta" e potresti dover o meno aver bisogno di chiamare il metodo del corpo. Se webrat dovrebbe funzionare, a meno che non abbiate ancora visitato una pagina. –

+2

page.body.should è quello che ti serve per capibara. – Clinton

4

Vorrei proporre qualche consolidamento ai passaggi utilizzando una tabella.

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 

vorrei suggerire:

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 | 

Il tuo attuale soluzione ha il trade off di non essere molto preciso, cercando in tutto il corpo di risposta si può trovare il testo da un esempio in un altro luogo. Suggerirei l'uso di XPATH fino alla soglia del dolore o utilizzando, presumo che tu usi Watir (o variante), le classi.

Si potrebbe raccogliere tutti i nomi degli eventi dalla tabella mediante iterazione sopra le righe (e specificando la colonna che contiene il nome dell'evento, qui Suppongo che il primo) ...

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

Poi affermare che gli eventi esistono e sono nell'ordine desiderato all'interno dell'array.

+1

Come posso Quindi affermare che gli eventi sono nell'ordine desiderato all'interno della matrice? –

+0

Aggiunte le asserzioni per assicurarsi che siano nell'array e che siano ordinate correttamente. – burtlo

0

Perché non utilizzare solo il selettore 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) 
Problemi correlati