div タグに特定の CSS スタイルがあるかどうかをどのようにテストしますか? display:none;
またはがあるかどうかをテストしようとしていdisplay:block
ます。
次のことを試しましたが、エラーが発生しました。
it {should have_selector('signup_server_generic_errors', /display:\s*none/)}
css スタイルを見つけようとする代わりに、css クラス名を見つけるテストを作成することをお勧めします。
このようにして、クラスを同じに保ちながら、基礎となる css スタイルを変更することができ、テストは引き続きパスします。
根底にあるスタイルを探すのは脆い。スタイルは頻繁に変わります。特定のスタイル要素を見つけることに基づいて rspec を作成すると、テストがより脆弱になります。div のルック アンド フィールを変更するだけでは、テストが失敗する可能性が高くなります。
CSS クラスの検索に基づいてテストを行うと、テストがより堅牢になります。ページのスタイルを変更するときにコードを変更する必要がなく、コードが正しく機能していることを確認できます。
この場合、具体的には、要素を非表示にするために.hidden
設定するという名前の css クラスを定義することが 1 つのオプションです。display:none;
このような:
CSS:
.hidden {
display:none;
}
html:
<div class="hidden">HIDE ME!</div>
カピバラ:
it {should have_css('div.hidden') }
このカピバラは、クラスを持つ div を探すだけhidden
です。必要に応じて、このマッチャーをより洗練されたものにすることができます。
しかし、要点はこれです。スタイルを css クラス名に添付してから、テストをスタイルではなくクラスに結び付けます。
has_css?
マッチャーを使用できます。オプションを受け入れることができ:visible
ます。詳細については、ドキュメントを確認できます: http://rdoc.info/github/jnicklas/capybara/Capybara/Node/Matchers#has_css%3F-instance_method
たとえば、次のことを試すことができます。
it { should have_css('div.with-some-class', :visible => true) }
要素に特定のクラスがあることを確認する私の方法:
let(:action_items) { page.find('div.action_items') }
it "action items displayed as buttons" do
action_items.all(:css, 'a').each do |ai|
expect(ai[:class]).to match(/btn/)
end
end
またはこのようなもの
expect(ai[:style]).to match(/color: red/)
ここで見つけました:http://rubydoc.info/github/jnicklas/capybara/Capybara/Node/Element#%5B%5D-instance_method
Capybara のassert_matches_style、または Rspec HaveStyleマッチャー (下で assert_matches_style を使用しています) を使用できます。
assert_matches_style を直接使用すると、次のようになります。
find(".element").assert_matches_style("font-size" => "46px")
私は Rspec 構文にあまり詳しくありませんが、次のようなものにする必要があります。
it { should match_style("font-size" => "46px") }