私のページには、<a href="/desired_path/1">Click to go</a>
のようなリンクが含まれている必要があります。
Assert_selectを使用してそれをどのようにテストしますか? href="/desired_path/1"
でa
タグの存在を確認したい。タグの属性をどのようにテストしますか?
Assert_selectの使い方を説明するリソースはありますか?ガイドとAPIドキュメントを読みましたが、わかりませんでした。これを行うための推奨されるより良い方法はありますか?
私はRails 3で作業しており、組み込みのテストフレームワークを使用しています。
ありがとう。
CSSセレクターをassert_selectに渡すことができます。したがって、タグの属性をテストするには、[attrname=attrvalue]
を使用します。
assert_select("a[href=/desired_path/1]") do |elements|
# Here you can test that elements.count == 1 for instance, or anything else
end
Assert_selectでは、属性値に疑問符を使用し、その後に一致する文字列を続けることもできます。
assert_select "a[href=?]", "/desired_path/1"
特に部分的な文字列または正規表現パターンに一致させたい場合は、より使いやすいassert_selectを使用する別の方法があります。
assert_select "a", :href => /acebook\.com\/share/
assert_select
を使用して、リンクについてさまざまなことをアサートする方法を次に示します。 2番目の引数は、href属性をテストする文字列または正規表現のいずれかです。
# URL string (2nd arg) is compared to the href attribute thanks to the '?' in
# CSS selector string. Also asserts that there is only one link matching
# the arguments (:count option) and that the link has the text
# 'Your Dashboard' (:text option)
assert_select '.menu a[href=?]', 'http://test.Host/dashboard',
{ :count => 1, :text => 'Your Dashboard' }
# Regular expression (2nd arg) tests the href attribute thanks to the '?' in
# the CSS selector string.
assert_select '.menu a[href=?]', /\Ahttp:\/\/test.Host\/dashboard\z/,
{ :count => 1, :text => 'Your Dashboard' }
assert_select
を使用できる他の方法については、Rails actionpack 3.2.15 docs(ファイルactionpack-3.2.15/lib/action_dispatch/testing/assertions/selector.rb
を参照))から取得した例を以下に示します。
# At least one form element
assert_select "form"
# Form element includes four input fields
assert_select "form input", 4
# Page title is "Welcome"
assert_select "title", "Welcome"
# Page title is "Welcome" and there is only one title element
assert_select "title", {:count => 1, :text => "Welcome"},
"Wrong title or more than one title element"
# Page contains no forms
assert_select "form", false, "This page must contain no forms"
# Test the content and style
assert_select "body div.header ul.menu"
# Use substitution values
assert_select "ol>li#?", /item-\d+/
# All input fields in the form have a name
assert_select "form input" do
assert_select "[name=?]", /.+/ # Not empty
end
具体的には、「[要素]の属性をどのようにテストしますか?」という質問です。
ここでの他の回答は、現在のRails/MiniTestで機能しなくなった方法でassert_select
を使用します。これに従って issue 、属性の内容に関するアサーションはこれを使用しますより多くのXpath-y 'match'構文:
assert_select "a:match('href', ?)", /jm3\.net/
Rails 4.1およびRails 4.2。
4.1ではこれが機能しました:
my_url = "/my_results?search=hello"
my_text = "(My Results)"
assert_select 'a[href=?]', my_url, my_text
4.2では、これによりエラーが発生しました:「サポート終了警告:無効なCSSセレクターのため、アサーションは実行されませんでした。予期しない '('の後に '[:equal、 "\"/my_results\""]'」
私は構文をこれに変更し、うまくいきました!:
assert_select 'a[href=?]', my_url, { text: my_text }
上記のエリオットの答えは私を助けました、ありがとう:)
assert_select 'a' do |link|
expect(link.attr('href').to_s).to eq expected_url
end