2010-10-19 14 views
9

Używam wersji Rails Tutorial Michaela Hartla.Sprawdzanie tytułu strony za pomocą rspec

Próbuję zweryfikować tytuł mojej strony. Test wygląda następująco: sekcja głowa

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

HTML wygląda tak

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

Dostaję następujący awarię

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 '

Czekam to przejść. Co ja robię źle? Używam specyfikacji Rails 3 i RSpec 2.0.0

Odpowiedz

4

Specyfikacje kontrolera zwykle nie wyświetlają pełnego widoku, ponieważ są przeznaczone do testowania kontrolerów w izolacji. Można powiedzieć rspec aby uczynić całą stronę, w tym dyrektywę integrate_views na szczycie grupy Przykład:

describe MyController do 
    integrate_views 

Jednak należy zadać sobie pytanie, czy naprawdę chcesz to zrobić, lub jeśli miałoby to więcej sensu Napisz widok specyfikacji.

btw można również użyć składni selektora CSS3 aby zaoszczędzić kilka klawiszy (może trzeba zawierać dopasowujących Webrat do tego):

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

EDIT

Dla Rspec2 wymienić integrate_views z render_views

+0

Próbowałem wprowadzenie dyrektywy integrate_views na górze, ale teraz jestem coraz błąd składni –

+2

Ups, trzeba być na rspec 2. Spróbuj 'render_views' . – zetetic

+0

Dzięki, może po prostu edytujesz swoją odpowiedź, mówiąc, że powinieneś używać render_views na Rspec 2? –

0

Podejrzewam, że masz gdzieś literówkę.

Od tego momentu pracuję nad Ćwiczeniem 4 z rozdziału 11. Każdy pojedynczy problem, który miałem z tutorialem, okazał się literówką z mojej strony.

Uwaga: Nie przecinam i wklejam. Wybieram cały kod ręcznie.

+0

Zrobiłem kopiuj-wklej rzecz ... I działało idealnie, gdy umieściłem render_views na górze –

2

Znalazłem, że łatwiej jest przenieść się do kapibara (używam Rails 3.0.1, Rspec 2.0.1, Ruby 1.9.2). Teraz możesz zrobić coś takiego, jak:

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

To pytanie wygląda na stare, co wyjaśnia, dlaczego jest teraz lepszy sposób.

Poniższy działa dobrze dla mnie:

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

Ponadto, powinieneś być bardzo ostrożny podczas używania metody 'include' w tym przypadku. Jeśli posiadasz ten napis w tytule, przejdzie on jednak także w przypadku niepożądanych rzeczy. Polecam w tym przypadku użycie metody 'eq', ponieważ zawiedzie, jeśli nie jest przekazywany dokładny ciąg znaków. –

Powiązane problemy