Domanda

Come faccio a inviare un cookie in un test funzionale? Come faccio a testare per essere sicuri che il cookie viene cancellato?

Ho avuto un grande successo con TDD per costruire i modelli per un'applicazione Rails, ma ho colpito un intoppo per quanto riguarda al controller di test: è possibile impostare i valori dei cookie, una volta in un test e leggerli, ma non posso chiaro loro. Cioè:

test "clears cookie" do
  get :set_it, :stuff => {'key' => 'value'} # stuff to cookify
  assert cookies['key'] == 'value' # works fine

  get :clear_it # cookie doesn't get sent. How do I simulate this?
  assert nil == cookies['key'], 'Cookie not cleared' # fails
end

La guida rotaie test non menziona come simulare l'invio di un cookie in un test, proprio come verificare che i dati sono stati impostati sul server. So che ho incontrato una situazione prima in cui i dati cookie non è alterata nel server fino a quando viene inviata la risposta. E 'quello che sta succedendo qui? Mi piacerebbe sorta sperato che i test funzionali avrebbero fatto un lavoro migliore di 'essere il cliente.'

E 'questo un problema ampiamente sapere? Sono persone solo rassegnarsi a usare JUnit per questo genere di cose? Mi piacerebbe davvero essere in grado di utilizzare un quadro di riferimento per tutti o quasi tutti della mia TDD.


disperazione pura e congetture mi ha portato a provare con ottimismo @ Response.Cookies, ma che non ha funzionato neanche.

È stato utile?

Soluzione

Se si vuole avere una prova di unità specificamente intorno al disinserimento di un cookie, allora si sta effettivamente testare se la risposta contiene un'intestazione che imposta il cookie a nulla. Sto assumendo il tuo get :clear_it sta facendo cookies.delete :cookie-name . Questo imposta response.header per contenere Set-[COOKIE-NAME]=;. Quindi, se gli altri metodi non riescono, si può solo cercare quella stringa direttamente.

Ciò che appare di pesce nel codice è che si sta solo controllando direttamente cookies. Dov'è la risposta va dal 'ottenere' richiesta?

Se tutto il resto, se in mancanza, si potrebbe anche usare i test di integrazione con Webrat come discusso qui . Ciò può non essere così grande come unit test, ma sarà almeno verificare la funzionalità.

Altri suggerimenti

Il mio test di logout aveva

assert_nil @response.cookies["auth_token"]

che funziona.

Che valore vuoi arrivare, se non nullo?

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