2010-10-19 1 views
9

Sto correndo attraverso Michael Hartl's Rails Tutorial.Verifica il titolo della pagina con rspec

Sto provando a verificare il titolo della mia pagina. Il test è simile al seguente: testata

it "should have the right title" do 
     get 'home' 
     response.should have_selector("title", :content => "Ruby on Rails Tutorial Sample App | Home") 
    end 

Il codice HTML simile a questo

<head> 
    <title>Ruby on Rails Tutorial Sample App | Home</title> 
</head> 

sto ottenendo il seguente errore

1) PagesController GET 'home' should have the right title Failure/Error: response.should have_selector("title", :content => "Ruby on Rails Tutorial Sample App | Home") expected following output to contain a Ruby on Rails Tutorial Sample App | Home tag: # ./spec/controllers/pages_controller_spec.rb:13:in `block (3 levels) in '

mi aspetto questo di passare. Che cosa sto facendo di sbagliato? Utilizzo Rails 3 e RSpec 2.0.0

risposta

4

Le specifiche del controller normalmente non rendono la vista completa, poiché sono destinate a testare i controller da soli. Si può dire Rspec di rendere l'intera pagina includendo la direttiva integrate_views nella parte superiore del gruppo Esempio:

describe MyController do 
    integrate_views 

Tuttavia ci si dovrebbe chiedere se si vuole veramente fare questo, o se sarebbe più senso scrivi le specifiche di visualizzazione.

btw è anche possibile utilizzare la sintassi selettore di CSS3 per risparmiare pochi tasti (potrebbe aver bisogno di includere i matchers Webrat per questo):

response.should have_selector("title:contains('Ruby on Rails Tutorial Sample App | Home')") 

EDIT

Per Rspec2, sostituire integrate_views con render_views

+0

Ho provato a mettere la direttiva integrate_views in alto, ma ora sto ottenendo un errore di sintassi –

+2

Ops, è necessario essere in Rspec 2. Provare 'render_views' . – zetetic

+0

Grazie, forse basta modificare la tua risposta per dire che dovresti usare render_views su Rspec 2? –

0

Ho il forte sospetto che tu abbia un errore di battitura da qualche parte.

A partire da questo momento, sto lavorando con l'Esercizio 4 del Capitolo 11. Ogni singolo problema che ho avuto con il tutorial è risultato essere un refuso da parte mia.

Nota: non sto tagliando e incollando. Sto dando un pugno in tutto il codice a mano.

+0

Ho fatto la cosa copia-incolla ... E ha funzionato perfettamente una volta che ho messo in cima le render_views –

2

Ho trovato più facile spostarmi a Capybara (sto usando Rails 3.0.1, Rspec 2.0.1, Ruby 1.9.2). Ora si può fare qualcosa di simile

page.should have_css('title', :text => 'Ruby on Rails Tutorial Sample App | Home') 
2

Questa domanda sembra vecchio, il che spiega il motivo per cui ora c'è un modo migliore.

Il seguente funziona bene per me:

it "has the correct page title", js: true do 
    visit "https://stackoverflow.com/users/sign_in" # for example 
    expect(page.title).to include "Sign In or Create a New Account" 
end 
+1

Inoltre, dovresti stare molto attento quando usi il metodo "include" in questo caso. Se si ha quella stringa nel titolo che passerà, tuttavia, potrebbero esserci anche cose indesiderate. In questo caso, raccomanderei di utilizzare il metodo 'eq', poiché fallirà se non è la stringa esatta che viene passata. –