2016-04-08 5 views
2

Als Teil meiner Ansichtsspezifikationen überprüfe ich manchmal, ob der richtige Text auch für ein bestimmtes Element auf der Seite gerendert wird.In HTML-Elementen in RSpec-Ansichtstests suchen

ist das gerenderte HTML Lassen Sie sagen -

<div class="user-msg"> 
    <b>Thank You!</b> 
</div> 

Ich könnte meiner Meinung nach Spezifikationen wie testen -

expect(rendered).to match(/Thank You/) 

dies falsch ausfallen könnte jedoch oder Pass je nachdem, ob es etwas anderes auf der Seite das sagt auch "Danke".

Wie suche ich innerhalb der spezifischen <div> in Frage? Wenn dies ein Feature-Test wäre, würde ich Capybara verwenden, um die Knoten zu wählen -

within(".user-mssg") { expect(page.body).to have_content("Thank You") } 

Wie finde ich ein bestimmtes HTML-Element (zum Beispiel .user-msg) und innerhalb es in meiner Ansicht Daten suchen?

Dank!

Bearbeiten: "Danke!"

Antwort

5

rspec-html-matchers macht genau das:

<h1>Simple Form</h1> 
<form action="/users" method="post"> 
<p> 
    <input type="email" name="user[email]" /> 
</p> 
<p> 
    <input type="submit" id="special_submit" /> 
</p> 
</form> 

spec:

expect(rendered).to have_tag('form', :with => { :action => '/users', :method => 'post' }) do 
    with_tag "input", :with => { :name => "user[email]", :type => 'email' } 
    with_tag "input#special_submit", :count => 1 
    without_tag "h1", :text => 'unneeded tag' 
    without_tag "p", :text => /content/i 
end