2012-09-28 41 views
2

我一直在使用Rails應用程序我一直在維護hpricot_matchers和最近的rspec_tag_matchers作爲matcher實現來測試內嵌嵌套標記的字符串(比如,比方說,HTML或XML)。特別是最後一個非常好,因爲它使用了Nokogiri。Sinatra是否有任何RSpec HTML標籤匹配器擴展?

最近我開始在Sinatra開發,當然,我還捆綁了rspec。一切都很好,整潔,直到我發現我沒有像have_tag(檢查標籤和屬性值)那樣的某些匹配器。那麼,在Sinatra中這將非常棒,上面提到的gem是不可用的,因爲它們有一個rspec-rails依賴項,它具有rails依賴性。

所以問題是:是否有任何工具可用於完成相同任務的Sinatra?任何Sinatra匹配在公開?雖然找不到任何東西。

回答

1

其實發現,沒有工作的延伸......

https://github.com/kucaahbe/rspec-html-matchers

應該已經看過多一點點。我沒有檢查它是否覆蓋了rspec匹配器幫助器所做的所有事情,但是其中最重要的部分都在那裏,包括非常有價值的has_tag。有一兩件事,但:兩個規範是有點不同的,當涉及到的子標籤嵌套條件:

rspec_tag_matchers(Rails3中):

text.should have_tag("p") do |paragraph| 
    paragraph.should have_tag("strong") 
end 

rspec_html_matchers(西納特拉/ ...):

text.should have_tag("p") do 
    with_tag("strong") 
end 
0

我認爲你正在尋找這...

Code Example for Rspec Matchers

代碼看起來像這樣有...

  # File lib/sinatra/tests/rspec/matchers.rb, line 52 
def have_a_page_header(expected, tag = 'h2') 
    simple_matcher("have an '#{tag}' page header with [#{expected.inspect}]") do |given, matcher| 
    given.should have_tag(tag, expected, :count => 1) 
    end 
end 

的一點是:你總是可以創建自己的匹配器。

希望有幫助。

+0

燁,該代碼屬於西納特拉的測試寶石。但那看起來過時並且不受支持。更糟糕的是,它需要haml和spec(不是rspec),而不需要它們作爲gem依賴項(無論如何,我都不使用它們,我想在任何地方解析文本,不僅僅是視圖生成而不管渲染髮動機)。 – ChuckE

+0

這不是真正的答案,它真的和字面上的「Code this like」可以創建自己的...不幸的是,我認爲你看起來太過分了,我只是想把這個片段歸功於擁有作者。 – vgoff

0

在測試sinatra應用程序(或任何機架應用程序)時,您可以使用Capybara。水豚包括幾個的匹配,將可能滿足您的需求:

  • ​​
  • have_xpath('//table/tr')
  • have_css('table tr.foo')
+1

我曾考慮過這個問題,但是水豚更像是一個集成測試解決方案,因此他們的選擇器更多的是HTML標記檢查。此外,我會捆綁更多的標記檢查。我想要更多的核心來檢查任何類型的標記,比如說,在SVG文件等元標記上。我剛纔提到的寶石只取決於nokogiri,這使得它非常高效並且名稱也很差(它不僅僅檢查html)。 – ChuckE