3

我一直在使用 Rails 应用程序,我一直在维护 hpricot_matchers 和最近的 rspec_tag_matchers 作为匹配器实现,以测试带有嵌套标签的字符串(例如,HTML 或 XML)。特别是最后一个非常好,因为它使用了Nokogiri。

最近我开始在 Sinatra 中进行开发,当然,我在其中捆绑了 rspec。一切都很好,很整洁,直到我发现我没有某些可用的匹配器,比如 have_tag (检查标签和属性值)。好吧,这在 Sinatra 中真的很棒,而且上面提到的 gem 不可用,因为它们有一个 rspec-rails 依赖项,它有一个 rails 依赖项。

所以问题是:是否有任何可用于 Sinatra 的工具来完成相同的任务?有没有公​​开的 Sinatra 匹配器?但是,找不到任何东西。

4

3 回答 3

1

实际上发现了一个可以完成这项工作的扩展......

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

应该看起来多一点。我还没有检查它是否涵盖了 rails rspec 匹配器助手所做的所有事情,但大多数重要的都在那里,包括非常有价值的 have_tag。但有一件事:当涉及到子标签中的嵌套条件时,两者的规范有点不同:

rspec_tag_matchers(rails3):

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

rspec_html_matchers(sinatra/...):

text.should have_tag("p") do 
  with_tag("strong")
end
于 2012-09-28T10:15:52.980 回答
0

我想你正在寻找这个...

Rspec 匹配器的代码示例

那里的代码看起来像这样......

          # 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

关键是:您始终可以创建自己的匹配器。

希望有帮助。

于 2012-09-28T07:47:22.337 回答
-1

在测试 sinatra 应用程序(或任何机架应用程序,就此而言)时,您可以使用Capybara 。Capybara 包括几个可能会满足您需求的匹配器:

  • have_selector('table tr')
  • have_xpath('//table/tr')
  • have_css('table tr.foo')
于 2012-09-28T14:52:27.810 回答