2010-10-19 5 views
9

Je cours à travers Rails Tutorial de Michael Hartl. J'essaye de vérifier le titre de ma page. J'essaye de vérifier le titre de ma page. Le test ressemble à ceci:Vérification du titre de la page avec rspec

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

La section de tête HTML ressemble à ceci

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

Je reçois l'échec suivant

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 '

Je me attends à ce passer. Qu'est-ce que je fais mal? J'utilise Rails 3 et RSpec 2.0.0

Répondre

4

Les spécifications du contrôleur ne rendent pas normalement la vue complète, car elles sont destinées à tester les contrôleurs de manière isolée. Vous pouvez dire Rspec de rendre la page entière en incluant la directive integrate_views en haut de l'exemple groupe:

describe MyController do 
    integrate_views 

Cependant, vous devez vous demander si vous voulez vraiment faire cela, ou s'il serait plus logique de écrire les spécifications d'affichage.

BTW vous pouvez également utiliser la syntaxe du sélecteur CSS3 pour sauver quelques frappes (peut-être besoin d'inclure les matchers de Webrat pour cela):

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

EDIT

Pour Rspec2, remplacer integrate_views avec render_views

+0

J'ai essayé de mettre la directive integrate_views en haut, mais maintenant j'obtiens une erreur de syntaxe –

+2

Oops, vous devez être sur Rspec 2. Essayez 'render_views' . – zetetic

+0

Merci, peut-être juste d'éditer votre réponse pour dire que vous devriez utiliser render_views sur Rspec 2? –

0

Je soupçonne fortement que vous avez une faute de frappe quelque part. Pour l'instant, je travaille sur l'exercice 4 du chapitre 11. Tous les problèmes que j'ai rencontrés avec le didacticiel ont été une faute de frappe de ma part.

Remarque: Je ne découpe pas et ne colle pas. Je frappe tout le code à la main.

+0

J'ai fait la chose copier-coller ... Et cela a fonctionné parfaitement une fois que j'ai mis render_views en haut –

2

J'ai trouvé plus facile de passer à Capybara (j'utilise Rails 3.0.1, Rspec 2.0.1, Ruby 1.9.2). Maintenant, vous pouvez faire quelque chose comme

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

Cette question a l'air vieux, ce qui explique pourquoi il y a maintenant une meilleure façon.

Les travaux suivants bien pour moi:

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

Aussi, vous devriez faire très attention en utilisant la méthode 'include' dans ce cas. Si vous avez cette chaîne dans le titre, elle passera, cependant, il pourrait aussi y avoir des choses non désirées. Je recommanderais d'utiliser la méthode 'eq' dans ce cas, car elle échouera si ce n'est pas la chaîne exacte qui est passée. –