查找特定HTML标记的规范不起作用

时间:2017-07-04 13:44:47

标签: ruby-on-rails ruby rspec capybara

我正在使用rails应用程序,并希望使用capybara进行测试,到目前为止我没有问题,但现在我正在实现降价解析功能,我无法让我的测试通过。

我添加了这个测试

it "Shows makdown as HTML" do
  visit_wiki
  expect(page).to have_tag('pre')  //**EDITED** becauseof typo
end

我无法使其发挥作用,visit_wiki只是一种很好的方法...访问维基。

def visit_wiki
  visit topics_path
  click_link topic.name
  click_link sentence
  expect(current_path).to eq topic_wiki_path(@wiki.topic, @wiki.id)
end

我知道这很有效,因为我一直在这个项目的其他部分使用它。

这也是我的工厂,我确保始终有一个pre HTML标记。

require 'random_data'
FactoryGirl.define do
  factory :wiki do
    title Faker::Lorem.sentence
    body  RandomData.random_md
    private false
    topic
    user
  end
end

//where random_md is

module RandomData
    def self.random_md
        md = []
        md << Faker::Markdown.headers
        md << Faker::Markdown.block_code
        rand(4..10).times do
            md << Faker::Markdown.random
        end
        md.join("\n")
    end
end

从那个工厂我能够播种数据并在我的网站上正确显示。 我甚至在this网站上试过这个:

expect("<html>
  <body>
    <h1>some html document</h1>
  </body>
 </html>").to have_tag('body')

仍然,失败......

我想我必须做一些事情,但不知道是什么,我真的很感激任何帮助。提前谢谢!

修改 这是身体的样子:          

<body>
  <div class="row">
    <div class="col-md-8">
      <h2>Labore</h2>
      .
      .
      .
      <div class="highlight">
        <pre>
            <span class="no">Quo</span> 
            <span class="n">voluptates</span>
            <span class="n">et</span> 
            <span class="n">et</span> 
            <span class="n">excepturi</span> 
            <span class="n">sit</span>
            <span class="o">.</span>
         </pre>
      </div>
      .
      .
      .
    </div>
  </div>
</body>
</html>

1 个答案:

答案 0 :(得分:1)

have_tag不是Capybara提供的,也不是您应该与Capybara一起使用的内容。这是因为rspec-html-matchers提供的have_tag匹配器在调用时将页面源作为字符串抓取,用nokogiri解析它,然后查询它。那个neuters,Capybara提供的等待/重试行为将导致不稳定/不工作的测试,更不用说为每个查询产生的额外开销。您想要的是have_css / have_xpath / have_selector

expect(page).to have_css('pre')

您的测试代码中的第二个问题是您不应该将current_patheq匹配器一起使用,而应该使用利用Capybaras等待的have_current_path匹配器/重试行为

expect(page).to have_current_path(topic_wiki_path(@wiki.topic, @wiki.id))