使用:
Ruby: ruby 1.9.3dev (2011-09-23 revision 33323) [i686-linux]
Rails: 3.2.9
Capybara: 2.0.3
Railsアプリケーションがあり、クリックするとAJAX POSTリクエストを送信し、JSレスポンスを返すリンクがあります。
リンクコード:
link_to("Send Notification", notification_path(user_id: user_id), remote: true, method: :post)
JS応答(.js.hamlファイル)は、リンクが存在するページで次の非表示のdivを切り替える必要があります。
js.hamlファイルの内容:
:plain
var notificationStatusContainer = $('#notification_status');
notificationStatusContainer.val("#{@notification_status_msg}");
notificationStatusContainer.show();
私は通知を送信し、キュウリを用いてユーザに通知ステータスメッセージを表示する私のシナリオをテストしていた(カピバラのサポートが組み込まれて宝石をキュウリ、レール)
ステップ定義の成功した応答でid:notification_statusを持つ要素が表示されることをテストしようとしました。このために、次のステートメントを試しました。
page.find('#notification_status').should be_visible
page.should have_selector('#notification_status', visible: true)
page.should have_css('#notification_status', visible: true)
page.find('#notification_status', visible: true)
page.find(:css, 'div#notification_status', visible: true)
上記のどちらも機能せず、ステップに失敗しました。上記の5つのスニペットのうち、最後の4つは次のエラーで失敗しました。
'expected to find css "#notification_status" but there were no matches. Also found "", which matched the selector but not all filters. (Capybara::ExpectationNotMet)'
次のステートメントが正しく渡されていたため、これは奇妙でした。
page.has_selector?('#notification_status')
そして実際、私はを使用してページソースを調べました
print page.html
現れた
<div style='' id='notification_status'></div>
予想通りでした。
最後に、このリンクcapybaraが要素の属性をアサートしていることを発見しました。これは、要素の属性を生の方法で検査する方法を示しています。
また、Capybaraのドキュメントで目に見えるものを見つけましたか?メソッド(http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Element#visible%3F-instance_method)次の情報:
Not all drivers support CSS, so the result may be inaccurate.
したがって、要素の可視性をテストするとき、カピバラの可視性の結果に依存しないという結論に達しましたか?CSSセレクターを使用し、リンクcapybaraで提案されているソリューションを使用する場合のメソッド要素の属性をアサートします
私は次のことを思いついた:
module CustomMatchers
def should_be_visible(css_selector)
find(css_selector)['style'].should_not include('display:none', 'display: none')
end
end
World(CustomMatchers)
使用法:
should_be_visible('#notification_status')