我正在使用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>
答案 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_path
与eq
匹配器一起使用,而应该使用利用Capybaras等待的have_current_path
匹配器/重试行为
expect(page).to have_current_path(topic_wiki_path(@wiki.topic, @wiki.id))