私はPageObjectパターンを使用しています。このパターンでは、テストのトップレベルからHTMLの詳細を抽象化しています。私はSitePrism gemを使ってこれをやっています。私の例ではCapybaraとSitePrismのどちらのアサーションスタイルですか?
、私がホームページを持っている(HomePage.rb):
共通ページのセクションを参照class HomePage < SitePrism::Page
set_url ENV['BASE_URL']
section :header, HeaderSection, "div[class='headerSection']"
、HeaderSection(HeaderSection.rb) :
class HeaderSection < SitePrism::Section
element :sign_in_button, "a[class='signIn']"
とステップ定義私のテスト(login.rb)のために:
And(/^I am not logged in/) do
@home_page = HomePage.new # actually, this is specified in env.rb
expect(@home_page.header).to have_sign_in_button
end
代わりのステップ定義にウェブ要素を露出させ、私はホームページのクラスメソッド内でこれをカプセル化します。上記
def amILoggedIn
expect(header).to have_sign_in_button
end
私もinclude RSpec::Matchers
を使用していますことを前提としています。それを行うための最善の方法は、ホームページ自体(HomePage.rb)内のクラスメソッドにアサーションを入れているようです。
私の方法は、ステップの定義(login.rb)にさらさ唯一の事のようになります。SitePrismの一環として
And(/^I am not logged in/) do
@home_page.amILoggedIn
end
、sign_in_button
要素がに独自のビルトインメソッドを持っていますでその存在について確認してください。
header.has_sign_in_button?
質問
amILoggedIn
メソッド内でこの主張を書くの中で最も推奨される方法でのベストプラクティス、(彼らの両方が同じ命令を使用して表示されるにもかかわらず)の面では
、
expect(header).to have_sign_in_button
または
header.has_sign_in_button?
私は、主に意見に基づいている質問を削除しました(しかし、私の意見では、これは良いパターンです)。 –