2011-10-07 17 views
11

Bir istek belirtimi yazıyorum ve "Raporlar» Raporları Yaşlandırma "dizesinin varlığını sınamak istiyorum. Ben doğrudan benim eşleştirici ifadesinde karakter koyarsanız bir hata (geçersiz baytlı char) olsun, bu yüzden bu çalıştı: BenSayfa içeriğinde html varlıkları için Rspec testi

expected there to be content "Reports » Aging Reports" in "\n Reports » Aging Reports\n

: page.should have_content("Reports » Aging Reports")

Bu mesajla testi başarısız ve hiçbir başarı ile .html_safe gibi şeyler çalıştı. Html varlıklarını içeren metinleri test etmenin bir yolu var mı?

Düzenleme:

find('#breadcrumbs').text.should match(/Reports . Aging Reports/): Ben kez bir geçici çözüm bulundu <a href="/reports">Reports</a> &raquo; <a href="/aging_reports">Aging Reports</a>

+0

# in Gemfile gem 'sanitize' # in testfile require 'sanitize' html = Sanitize.clean(page.body.text) html.should have_content("Reports &raquo; Aging Reports") 
Zabba

+0

HTML aslında » », denediğim » öğesinin başka bir şeklidir, ancak sorunu güncelledim. – MWean

+0

RSpec, '» 'yi sizin için' '' haline getiriyor gibi görünüyor. Testinizdeki gerçek karakteri dahil etmeyi deneyin. – thomasfedb

cevap

1

olmak yerine bir dize regex kullanır:

İşte html kaynağının ilgili bir alandır

Bu, I 'metnini içeren breadcrumbs div metnini alır.' M arıyoruz, bu yüzden maçın kapsamı sınırlıdır. Bu iyi çalışıyor, ancak yine de belirli html varlıkları eşleştirmeyi bilmeyi çok isterim. O bunu en zarif çözüm olduğundan emin değilim dedi

breadcrumb = '<a href="/reports">Reports</a> &raquo; <a href="/aging_reports">Aging Reports</a>' 
page.body.should include(breadcrumb) 
expect(page.body).to include(breadcrumb) # rspec 2.11+ 

:

6

Sen de sayfanızın ham kaynağında deney göz atabilirsiniz. Açıkça a href en Kırıntının bloğu içinde aradığınız

within '.breadcrumb' do 
    page.should have_css('a', text: 'Reports') 
    page.should have_css('a', text: 'Aging Reports') 
    expect(page).to have_css('a', text: 'Reports') # rspec 2.11+ 
    expect(page).to have_css('a', text: 'Aging Reports') # rspec 2.11+ 
end 

Bu şekilde: sadece bağlantıları div içinde mevcut doğrulamak olabilir sizin bağlantıları etrafında .breadcrumb adında bir sınıf var varsayarsak.

3

html_safe html etiketlerini kaldırmaz, eğer istediğini buysa.

Testten önce html etiketlerini kaldıracaksanız, sanitize gem kullanabilirsiniz. ... HTML kaynak bir `» `ve bir` » `içerdiğinden muhtemeldir

page.should have_content("Reports » Aging Reports") 
0

Bazen basit çözüm sağ biridir ve şeyler sadece çalışır. HTML'yi, `» `yerine` » `kullanacak şekilde değiştirin. Gerçekleştirilen HTML nedir? HTML kaynağının `` `kısmı mı yoksa HTML kaynağında »` olarak mı tanımlanmış? Lütfen bize kaynak HTML'yi gösterin. Yine de "beklenen" in neden "»" yerine » `olduğunu gösterdiğinden emin değilsiniz.