3

私は初心者で、Capybara を使用して Rails プロジェクトをテストしようとしていますが、div から文字列を検出しようとすると、page と page.body の意味に混乱します: (:js=>true モードで)

<div>"some content"</div>

私のテストのいくつかは

page.should have_content "some content"

いくつかは

page.body.should have_content "some content"

コンテンツを配置しようとしましたが、「page.body」だけが貴重な情報を提供し、「ページ」自体には何も表示されず、ページと page.body が何をしたかについての明確な説明が見つかりません。誰でも私を助けることができますか?

4

2 に答える 2

2

page は現在の Capybara セッションです。#find/#first/#visit/etc を呼び出すことは、page.find(...)、page.first(...) などを呼び出すことと同じです。

page.body は、ページの HTML ソースを返します。

ほとんどの場合、page.body でマッチャーを呼び出したくないので、99.9% の時間は使用する必要があります。

page.should have_content(...) 

または同等の期待構文。これは、page.body でマッチャーを呼び出すと、実際には返された文字列がパーサーを介して実行され、テストしているブラウザーでクエリを実行するのではなく、それに対してクエリが実行されるためです。

于 2015-06-17T20:06:35.317 に答える
0

この構文は非推奨であり、次のように変更する必要があると思います。

expect(page).to have_content "some content"

これにより、指定したコンテンツのレンダリングされたページがチェックされます。期待どおりのページをレンダリングしているかどうかが不明で、テストをデバッグしたい場合は、 を使用puts page.bodyしてデバッグできます。

should と expect の詳細については、こちらを参照してください。

于 2015-06-12T12:12:38.397 に答える