Capybara: Wie teste ich den Titel einer Seite?

69

Wie teste ich in einer Rails 3-Anwendung mit Steak, Capybara und RSpec den Titel der Seite?

Nerian
quelle

Antworten:

102

Seit der Version 2.1.0 von Capybara gibt es in der Sitzung Methoden, um mit dem Titel umzugehen. Du hast

page.title
page.has_title? "my title"
page.has_no_title? "my not found title"

So können Sie den Titel wie folgt testen:

expect(page).to have_title "my_title"

Laut github.com/jnicklas/capybara/issues/863 funktioniert Folgendes auch mit Capybara 2.0 :

expect(first('title').native.text).to eq "my title"
Lars Schirrmeister
quelle
14

Dies funktioniert unter Rails 3.1.10, Capybara 2.0.2 und Rspec 2.12 und ermöglicht den Abgleich von Teilinhalten:

find('title').native.text.should have_content("Status of your account::")
jpw
quelle
1
Vielen Dank! Ich habe dies tatsächlich verwendet, um Capybara zu patchen, siehe meine Antwort unten.
Jake
13

Sie sollten in der Lage sein, nach dem titleElement zu suchen , um sicherzustellen, dass es den gewünschten Text enthält:

page.should have_xpath("//title", :text => "My Title")
Dylan Markow
quelle
Ich erhalte einen Fehler / Fehler: page.should have_xpath ("// title", "home") falsche Anzahl von Argumenten (3 für 2)
Nerian
Und der Code lautet: Szenario "Der Benutzer ist angemeldet und kann seine Homepage sehen" besuchen Sie die Seite ('/'). Sollte have_xpath ("// title", "home") enden
Nerian
Hoppla, ich habe vergessen, dass der zweite Parameter ein Hash sein soll ... Überprüfen Sie meine überarbeitete Antwort.
Dylan Markow
Ich wollte das nicht wirklich als Antwort posten, obwohl ich denke, dass es sein könnte (ich weiß, dass es nicht sehr rubinrot ist). page.should have_content('<title>Your Title</title>')
Tass
8
Dieser Code funktioniert nicht mehr mit Capybara 2: github.com/jnicklas/capybara/issues/863
Mic92
3

Ich habe dies meinem Spezifikationshelfer hinzugefügt:

class Capybara::Session
  def must_have_title(title="")
    find('title').native.text.must_have_content(title)
  end
end

Dann kann ich einfach verwenden:

it 'should have the right title' do
  page.must_have_title('Expected Title')
end
Jake
quelle
Das ist eine schöne Ergänzung zum Spezifikationshelfer!
jpw
2

Das Testen des Titels jeder Seite kann mit RSpec viel einfacher durchgeführt werden.

require 'spec_helper'

describe PagesController do
  render_views

  describe "GET 'home'" do
    before(:each) do
      get 'home'
      @base_title = "Ruby on Rails"
    end

    it "should have the correct title " do
      response.should have_selector("title",
                                :content => @base_title + " | Home")
    end
  end
end
ChuckJHardy
quelle
2
Das ist einfacher als page.should have_xpath ("// title" ,: text => "My Title")?
Mike Blyth
1
Das Rendern von Ansichten in Controller-Tests ist nicht meine Sache. Ich stimme für die Verwendung von Integrationstests (und Capybara) zur Überprüfung des Pastetentitels.
Grimmo
2
Capybara 2 akzeptiert nur: Text nicht: Inhalt als Parameter. Der Inhalt eines Titel-Tags kann nicht mit der neuesten Capybara überprüft werden: github.com/jnicklas/capybara/issues/863
Mic92
2

Um den Titel einer Seite mit Rspec und Capybara 2.1 zu testen, können Sie verwenden

  1. expect(page).to have_title 'Title text'

    Eine andere Option ist

  2. expect(page).to have_css 'title', text: 'Title text', visible: false
    Seit Capybara 2.1 ist die Standardeinstellung Capybara.ignore_hidden_elements = trueund da das Titelelement unsichtbar ist, benötigen Sie die Option visible: falsefür die Suche, um nicht sichtbare Seitenelemente einzuschließen.

Aristotelis_Ch
quelle
0

Sie müssen nur die festlegen , subjectum pagedann für die Seite eine Erwartung schreiben titleMethode:

subject{ page }
its(:title){ should eq 'welcome to my website!' }

Im Zusammenhang:

require 'spec_helper'

describe 'static welcome pages' do
  subject { page }

  describe 'visit /welcome' do
    before { visit '/welcome' } 

    its(:title){ should eq 'welcome to my website!'}
  end
end
Starkers
quelle
-1

it { should have_selector "title", text: full_title("Your title here") }

Hengjie
quelle