UIで発生したことに応じてボタンを有効/無効にするアプリがあります。
カピバラを使ってボタンが存在するかどうかを簡単に検出できます
should have_button 'save'
しかし、保存ボタンの状態を確認する方法がわかりません。あれは:
ボタンの存在とその有効または無効の状態をチェックするCapybaraアサーションを作成するにはどうすればよいですか?
無効になっているボタンのチェックを一緒にハッキングしました。有効の場合、一致するボタンがあり、一致する無効なボタンがないことを確認できたと思います。しかし、これは控えめに言っても、不格好です。
これは非常に基本的なUIチェックのように思われるので、何かを見逃したことは確かですが、何がわからないようです。
集合体の回答に基づいてフォローアップします。
コメントで述べたように、カピバラの振る舞いは基礎となるドライバーに依存しています。Webkitを使用しており、「true」/「false」の文字列の結果を返します。どうやら、他のドライバーはtrue/falseを返します。Capybaraの人々はこの問題(github.com/jnicklas/capybara/issues/705)を認識していますが、解決するのは実際には問題ではないと(おそらく正しく)感じています。
テストを使用しているドライバーに依存させるのではなく、カスタムマッチャーを作成することになりました。
RSpec::Matchers.define :be_enabled do
match do |actual|
driver_result = actual[:disabled]
# nil, false, or "false" will all satisfy this matcher
(driver_result.nil? || driver_result == false || driver_result == "false").should be_true
end
end
RSpec::Matchers.define :be_disabled do
match do |actual|
driver_result = actual[:disabled]
(driver_result == "disabled" || driver_result == true || driver_result == "true").should be_true
end
end
次に、次のように入力できます。
user_license_area.find_button('Save').should be_disabled