Domanda

Qualcuno può chiarire con una storia utente semplice la piena fetta di cetriolo che cosa sarebbe stato utilizzato e che cosa RSpec potrebbe essere utilizzato per? Ho acquistato il libro RSpec l'altro giorno e sono state andando attraverso di essa. L'autore sembra essere piuttosto vaghi, a volte.

Quello che sto pensando se la storia utente è qualcosa di simile (scusate la scorrettezza della sintassi, questo è solo così si ottiene il punto):

Quando un utente inserisce un numero di telefono valido quindi ottengono un messaggio che dice "non valido Numero di telefono"

Se scrivo fuori tutto il codice per cetriolo per controllare questo e poi scrivere la roba RSpec, sto praticamente duplicare la mia prova. C'è uno scenario per spiegare come il test cetriolo dovrebbe essere diverso dal test RSpec?

Mi sento come si sarebbe di ripetere prove su entrambi i livelli per tutto il tempo.

Se non c'è una risposta definitiva su questo, ho intenzione di cominciare a pensare la gente cetriolo semplicemente non voleva pestare i piedi a RSpec persone.

Si prega di aiuto. Mi sento come se la mia testa sta per esplodere.

Grazie!

È stato utile?

Soluzione

cetriolo è usato per spiegare (faranno un'offerta) di una parte (storia) dell'applicazione anziché unit test o test di comportamento (che è al centro di RSpec)

Quindi, test IMHO cetriolo (storie) non sostituiscono i test RSpec.

I test RSpec tendono a guidare lo sviluppo dei modelli e controllori, e le storie tendono a guidare lo sviluppo dei punti di vista.

Dalla tua descrizione sembra che si sta utilizzando il cetriolo sia prova le storie e il comportamento.

Altri suggerimenti

Potrebbe essere utile per esaminare le screencast a BDDCasts.com . Essi si cammina attraverso la creazione delle storie e le specifiche per un app. E 'davvero mi ha aiutato. possedere anche il libro RSpec, ma era ancora confusa. Si potrebbe anche voler controllare appena fuori la loro fonte su GitHub.

Per me va in questo modo:

  • cetriolo per verificare ciò che l'utente vedrà. (Test di stack completa)

  • Rspec per testare tutto il resto. (Modello, controllore)

Si pensi cetriolo come testare l'intera applicazione, dall'esterno verso l'interno, dove RSpec è unit testing di moduli specifici. Si inizia specificando quali comportamenti si desidera che l'applicazione per avere nel cetriolo poi cadere giù in RSpec e descrivere le classi e moduli che compongono quel lavoro comportamento.

Mi c'è voluto un po 'per tipo di farlo, ma mi sto trovando cetriolo è veramente buono per descrivere a grandi linee quali caratteristiche si desidera che l'applicazione fare e RSpec è veramente bravo a descrivere come dovrebbe effettivamente farlo.

Quindi, si potrebbe dire nelle tue storie di cetriolo che tipo di funzione che si desidera e scrive eccellente semplici passi per fornire input e guardare uscita. Poi si scende a RSpec e scrivere le specifiche su come dovrebbe effettivamente farlo.

Diciamo che la vostra caratteristica è la possibilità di cercare i nomi utente su un sito web. Si potrebbe scrivere una funzione di cetriolo e il primo (e solo la prima) scenario come questo:

Feature: Search users
  In order to find people with similar interests as myself
  As a user
  I want to search for people

Scenario: Search for similar hobbies
  Given there is a search page
    And there is a list of hobbies
    And one of the hobbies is "full contact ironing"
   When I select "full contact ironing"
    And press search
   Then a list of users with the hobby "full contact ironing" are shown

Si esegue cetriolo, ti dice i passi che ti manca, di copiare quelli e creare i semplici passi per verificare la presenza di queste cose, ma non scrivere alcun codice ancora.

Quando hai finito con le definizioni di passo si scende in RSpec e iniziare a scrivere le specifiche di come si vuole far funzionare tutto questo. (Cetriolo di corso dovrebbe essere fallendo)

describe "SearchController" do

  it "should respond to searches" do
    sc = SearchController.new
    sc.should respond_to(:search)
  end

end

Si esegue RSpec e guardare fallire poi spegnersi e scrivere il codice:

class SearchController

  def search
  end

end

Questo è tutto. Ora eseguire nuovamente il test. Si dovrebbe passare in modo da iniziare a ricevere più specifici e iniziare a descrivere come si intende effettivamente utilizzare la funzione di ricerca. Non volevo arrivare troppo in profondità in esso Volevo solo dare l'idea che si descrive ciò che si desidera in Cetriolo poi descrivere come dovrebbe effettivamente funzionare in RSpec.

Naturalmente si può fare tutto in cetriolo o tutto in RSpec ma ho davvero trovato cetriolo mi aiuta a dire in modi molto semplici quello che voglio, dove se cerco di farlo in RSpec ho perderci nei dettagli. Se uso cetriolo primo a descrivere la caratteristica fondamentale che voglio e perché poi posso cadere in RSpec e dire come voglio la caratteristica di lavorare in realtà.

Non ci sarà duplicazione a volte i test, che non è molto secca, ma se si pensa di esso come un livello di dettaglio problema potrebbe non disturbarti tanto. Stavo facendo un sacco di duplicazione degli sforzi in un primo momento fino a quando mi sono reso conto che dovrei semplicemente dire in genere quello che voglio in Cetriolo allora dico specificamente quello che voglio in RSpec.

Questa è l'idea tutto solo un newbie di come utilizzare gli strumenti ma è sembrava funzionare bene per me finora. Probabilmente ho dato un esempio orribile ma sto solo cercando di ottenere il punto attraverso di dettaglio generale allo specifico dettaglio che ho trovato utile quando si utilizzano gli strumenti.

Rspec e cetriolo sono indipendenti e si può usare cetriolo e un altro framework di test per i test (Test Unit, shoulda ecc).

Il punto è, che cosa si vuole testare con cetriolo? Perché in effetti si potrebbe finire di ripetere prove e che non sarebbe davvero utile non è vero? :)

Ci sono diverse filosofie con cetriolo.

Con cetriolo si può fare:

DMA (significato diretto accesso modello, Sì, è possibile testare completamente il modello di come si farebbe in RSpec)

BrowZer simulato (accesso intera MVC pila, javascript)

Browser automatico (uso Webrat e selenio per accedere ai punti di vista, con javascript, più lento, vero e proprio BrowZer)

Quello che mi piace fare è utilizzare il cetriolo di controllare ciò che viene restituito all'utente. Questo è di solito ciò che ha senso per me quando ho definire le mie storie dal momento che non ho realmente in mente il codice che sto per scrivere. Così sto testando il risultato finale con cetrioli -> vista (usando simulate o BrowZer automatizzato)

Poi uso rspec di testare qualsiasi codice che scrivo nei controller e modelli.

Quindi nel tuo caso,

Quando un utente inserisce un numero di telefono valido allora ottengono un messaggio che dice "non valido Numero di telefono"

Vorrei utilizzare Webrat per verificare che l'utente ottiene il non valido numero di telefono messaggio nella vista. Vorrei usare Rspec alla prova la mia azione del controller e il modello.

cetriolo può essere utilizzato per eseguire praticamente qualsiasi codice, che è per questo che penso che stai ricevendo confuso. Ma cetriolo non fornisce altri tipi di strutture per le prove, come beffardo e spegnendo i metodi che rendono il test delle unità più specifico.

La roba RSpec è stato pensato per affrontare piccoli pezzetti di comportamento e rendere tutto molto discreto. Se si ha familiarità con test di unità e quadri per che questo dovrebbe avere più senso.

L'utilità cetriolo è di essere in grado di tradurre le descrizioni di alto livello per una serie di azioni di livello superiore del sistema.

In questo articolo potrebbe dare qualche prospettiva: quando ripetere se stessi in test - e quando non

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top