【问题标题】:Are there any RSpec HTML tag matchers extensions for sinatra?是否有任何适用于 sinatra 的 RSpec HTML 标签匹配器扩展?
【发布时间】:2012-09-20 01:39:58
【问题描述】:

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

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

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

【问题讨论】:

    标签: ruby rspec sinatra rspec2


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

      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
      

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

      希望对您有所帮助。

      【讨论】:

      • 是的,该代码属于 sinatra-tests gem。但这看起来已经过时且不受支持。更糟糕的是,它需要 gem 内部的 haml 和 spec(不是 rspec)而不需要它们作为 gem 依赖项(无论如何,我都不使用它们,我想在任何地方解析文本,不仅在视图生成时不考虑渲染引擎)。
      • 这并不是答案的重点,它确实是“像这样的代码”,您可以创建自己的...不幸的是,我认为您看得太远了,我是只是试图将 sn-p 归功于拥有作者。
      【解决方案3】:

      您可以在测试 sinatra 应用(或任何机架应用)时使用 Capybara。 Capybara 包含几个可能会满足您需求的匹配器:

      • have_selector('table tr')
      • have_xpath('//table/tr')
      • have_css('table tr.foo')

      【讨论】:

      • 我想过,但 Capybara 更像是一个集成测试解决方案,因此它们的选择器更像是一个 html 标记检查。此外,我会捆绑更多的标记检查。我想要更核心的东西来检查任何类型的标记,比如 SVG 文件上的元标记标记等。我提到的 gem 只依赖于 nokogiri,这使得它的性能非常好,而且命名也很糟糕(它检查的不仅仅是 html)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-30
      • 2018-06-07
      • 1970-01-01
      • 2011-06-25
      • 2022-08-17
      相关资源
      最近更新 更多