2010-11-19 17 views
1

/Interface \d/'un sayfada üç kez oluştuğunu biliyorum. Ama bunun için Salatalık'ta Capibara ile nasıl test edeceğimi bilmiyorum.Capybara (veya Webrat, sanırım) ve Salatalık kullanarak bir sözcüğün birden fazla oluşumu nasıl kontrol edilir?

Then /^(?:|I)should see \/([^\/]*)\/ (\d+)(?:x|X| times?)?$/ do |regexp, count| 
    regexp = Regexp.new(regexp) 
    count = count.to_i 
    if page.respond_to? :should 
    page.should have_xpath('//*', { :text => regexp, :count => count }) 
    else 
    assert page.has_xpath?('//*', { :text => regexp, :count => count }) 
    end 
end 

Ancak, bu benim Then I should see /Interface \d+/ 3 times için false döndürür: İşte benim ilk girişimdi.

Bunun nedeninin, has_xpath'un all kullanmasından kaynaklandığını öğrendim. Benim testte bu koyarak:

puts all(:xpath, '//*', { :text => regexp}).map {|e| pp e} 

sonuçları

#<Capybara::Element tag="html" path="/html"> 
#<Capybara::Element tag="body" path="/html/body"> 
#<Capybara::Element tag="div" path="/html/body/div"> 
#<Capybara::Element tag="div" path="/html/body/div/div[2]"> 
#<Capybara::Element tag="table" path="/html/body/div/div[2]/table"> 
#<Capybara::Element tag="tbody" path="/html/body/div/div[2]/table/tbody"> 
#<Capybara::Element tag="tr" path="/html/body/div/div[2]/table/tbody/tr[1]"> 
#<Capybara::Element tag="td" path="/html/body/div/div[2]/table/tbody/tr[1]/td[3]"> 
#<Capybara::Element tag="tr" path="/html/body/div/div[2]/table/tbody/tr[2]"> 
#<Capybara::Element tag="td" path="/html/body/div/div[2]/table/tbody/tr[2]/td[3]"> 
#<Capybara::Element tag="tr" path="/html/body/div/div[2]/table/tbody/tr[3]"> 
#<Capybara::Element tag="td" path="/html/body/div/div[2]/table/tbody/tr[3]/td[3]"> 

Yani benim metin içeren unsurlara yol boyunca her adımda sayımını alıyorum. : - \

Belki de has_content'un beni kurtaracağını düşünmüştüm ama bir sayı kabul etmiyor.

Yardım! Böyle

cevap

2

şey çalışması gerekir: Ben "filan içinde" kullanmak sevmiyorum

Then /^(?:|I)should see \/([^\/]*)\/ (\d+)(?:x|X| times?)?$/ do |regexp, count| 
    regexp = Regexp.new(regexp) 
    count = count.to_i 
    page.find(:xpath, '//body').text.split(regexp).length.should == count+1 
end 
+0

İki nedenleri: 1) kırılgan. Şu anda bunlar s'de, ama yakında değişecek. Testi değiştirmek zorunda kalmak istemiyorum. 2) Bu, salatalık özelliklerinde mümkün olduğunca fazla yapışmayı denemek istediğim kullanıcı bakış açısından değil. – chadoh

+0

Yeterince adil ... Css seçici önerisini kaldırdım. – Zubin