Ruby on rails 查找特定HTML标记的规范无效

Ruby on rails 查找特定HTML标记的规范无效,ruby-on-rails,ruby,rspec,capybara,Ruby On Rails,Ruby,Rspec,Capybara,我正在开发一个rails应用程序,希望使用capybara进行测试,到目前为止我没有问题,但现在我正在实现一个降价解析功能,我无法通过测试 <body> <div class="row"> <div class="col-md-8"> <h2>Labore</h2> . . . <div class="highlight"> <pr

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

<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>
我添加了这个测试

it "Shows makdown as HTML" do
  visit_wiki
  expect(page).to have_tag('pre')  //**EDITED** becauseof typo
end
<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>
我不能让它工作,
访问wiki
只是一种很好地。。。访问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
<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>
我知道这是可行的,因为我已经在这个项目的其他部分使用了它

<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>
这里也是我的工厂,我确保总是有一个
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
<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>
需要“随机数据”
工厂女孩
工厂:wiki-do
标题伪造者:Lorem.句子
body RandomData.random\u md
私人假
话题
用户
结束
结束
//random_md在哪里
模块随机数据
def self.random_md
md=[]

md
have_tag
不是Capybara提供的,也不是您应该与Capybara一起使用的。这是因为rspec html matchers提供的
have_标记
matcher在调用时将页面源作为字符串抓取,用nokogiri解析,然后对其进行查询。这将消除Capybara提供的等待/重试行为,并将导致不稳定/不工作的测试,更不用说为每个查询产生的额外开销了。您想要的是
拥有css
/
拥有xpath
/
拥有选择器

<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>
expect(page).to have_current_path(topic_wiki_path(@wiki.topic, @wiki.id))
测试代码中的第二个问题是,您不应该在
eq
匹配器中使用
current\u path
,而应该使用
have\u current\u path
匹配器,它利用水豚的等待/重试行为

<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>

什么失败了?错误消息是什么?另外,是
expect(第页)。要正文有标签('pre')
正确吗?对我来说,这看起来像是一个打字错误;这不应该是
expect(page.body)。要有标签('pre')
?@TomLord是的,对不起,应该像
expect(page)。要有标签('pre')
,我会编辑问题。不过,这不是问题所在。没有错误消息,只有17个示例,1个故障
,因此,如果故障出现在
expect(page)…
行中,那么这就是
页面的值
?只需编辑问题@tomlordsho谢!那太棒了,也谢谢你纠正我的路径错误,我到处都有,我现在就改。