2017-07-04 4 views
0

私はレールアプリケーションで作業しており、capybaraを使用してテストしたいと思っていますが、これまでは問題はありませんでしたが、マークダウン解析機能を実装しています。特定のHTMLタグを検索する仕様が機能しない

visit_wikiがうまく... Wikiを訪問するだけの方法ですが、私はこのテストに

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

を追加し、私はそれを動作させることはできません。

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 

私はこのプロジェクトの他の部分でこれを使用していたため、そのことが分かりました。

私の工場では、必ず1つの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') 

はまだ、失敗...

を私は私は本当に任意の助けをいただければ幸いです何を、知らないwromなく、何かをしなければなりませんね。前もって感謝します!

EDIT これは、体がどのように見えるかです:

<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

何が失敗しますか?エラーメッセージとは何ですか? –

+2

また、 'expect(page).to body have_tag( 'pre')'は正しいですか?それは私のタイプミスのように見えます。それは 'expect(page.body).to_tag( 'pre')'ではないはずですか? –

+0

@TomLordはい申し訳ありませんが、 'expect(page).to_tag( 'pre')'のようなはずです。それでも、それは問題ではありませんでした。そして、エラーメッセージはありません。「17例、1失敗」 – OmarAguinaga

答えて

1

have_tagはカピバラが設けられていないですし、カピバラに使用されなければならないものではありません。これは、rspec-html-matchersによって提供されたhave_tagマッチャーが呼び出し時にページソースを文字列として取得し、nokogiriで解析してから照会するためです。これは、すべてのクエリで生成される余分なオーバーヘッドは言うまでもなく、Capybaraが提供する待機中/再試行中の動作を中和し、不安定/非動作テストにつながります。何が欲しいのは、あなたのテストコードでhave_css/have_xpath/have_selector

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

第二の問題は、あなたが待っているカピバラを利用have_current_pathマッチャーを使用しなければならない、むしろ、eqマッチャーでcurrent_pathを使用すべきではないということです/再試行動作

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

を編集しましたありがとう!それは素晴らしい、私のパスのエラーを修正するためにもありがとう、私はそれをどこにでも持っている、私は今それを変更します。 – OmarAguinaga

関連する問題