2

を使用してhtml要素のコンテンツをテストするいくつかの例に出くわしましたpage.should have_selector "title", content: "my awsome content"が、これは常に合格のようです。正しい呼び出しは(の代わりにpage.should have_selector "title", text: "my awsome content"注意)のようです。text:content:

content:このRspec呼び出し のセレクターは何ですか?

4

1 に答える 1

1

短い答え:

have_selector:contentオプションをサポートしていません。

長い答え:

Rspecは、のような呼び出しを変換する動的メソッドを作成[].should be_emptyします。[].empty?.should == trueあなたの場合は、にpage.should have_selector "title", content: "my awesome content"変換しますpage.has_selector?("title, content: "my awesome content").should == true

カピバラはhas_selectorを提供しますか?メソッド。基本的には、パラメーターをtest/unitスタイルアサーションassert_selectorに渡すだけです。

def has_selector?(*args)
  assert_selector(*args)
rescue Capybara::ExpectationNotMet
  return false
end

assert_selector次に、そのパラメーターを再びCapybara finderメソッドに渡します。一致するものが見つかった場合all()は戻りtrue、一致しなかった場合は例外を発生させます(これは、has_selector?キャッチしてから戻りますfalse)。

def assert_selector(*args)
  synchronize do
    result = all(*args)
    result.matches_count? or raise Capybara::ExpectationNotMet, result.failure_message
  end
  return true
end

このallメソッドは、クエリに一致するすべての結果を返します。ここに、受け入れ可能なオプションに関するドキュメントがあります

# @overload all([kind], locator, options)
#   @param [:css, :xpath] kind                 The type of selector
#   @param [String] locator                    The selector
#   @option options [String, Regexp] text      Only find elements which contain this text or match this regexp
#   @option options [Boolean] visible          Only find elements that are visible on the page. Setting this to false
#                                              (the default, unless Capybara.ignore_hidden_elements = true), finds
#                                              invisible _and_ visible elements.
# @return [Array[Capybara::Element]]           The found elements

content有効なオプションとしてリストされていないため、無視されていることがわかります。

于 2012-10-13T01:21:54.333 に答える