1. ホーム
  2. スクリプト・コラム
  3. ルビートピックス

Ruby on RailsにおけるCucumberの活用を解説します。

2022-02-03 01:52:19


    未完成のシナリオには、@wip(work in progress)タグを付けてください。これらのシナリオは考慮されず、テストの失敗としてマークされることはありません。未完成のシナリオが完成し、機能テストに合格したら、そのシナリオをテストスイートに追加するために、@wip タグを削除しなければなりません。
    デフォルトの設定ファイルで、@javascriptでマークされたシナリオを除外するように設定してください。これらはテストのためにブラウザを使用するので、一般的にシナリオの実行速度を上げるために無効にすることをお勧めします。

    javascriptでマークされたシナリオのために、別のプロファイルを設定します。

        設定ファイルは、cucumber.ymlファイルで設定することができます。

    # Profile definitions.
    profile_name: --tags @tag_name


        コマンドでプロファイルを実行します。

    cucumber -p profile_name



    を使用する場合 ファブリケーション を使用してダミーデータ (フィクスチャ) を置き換えると、定義済みの 製作手順 .

    古いweb_steps.rbのステップ定義は使わないでください! 最新版のCucumberではウェブステップが削除され、それを使うとシナリオが冗長になり、アプリケーションのドメインが正しく反映されなくなりました。

    要素の視覚的なテキストをチェックするとき、idの代わりに要素のテキストをチェックします。

    同じ種類のオブジェクトに対して、異なる機能的特徴を作成する。

  # Difference
  Feature: Articles
  # ... Feature: Articles ...

  # Good
  Feature: Article Editing
  # ... Features ...

  Feature: Article Publishing
  # ... Features ...

  Feature: Article Search
  # ... Feature implementation ...



    各機能は主に3つの要素で構成されています。
        タイトル
        Narrative - この機能が何であるかについての短い説明です。
        受入基準 - 別々のステップで構成されるそれぞれのシナリオのセット。

    最も一般的な形式は、Connextra形式と呼ばれるものです。

  In order to [benefit] ...
  A [stakeholder]...
  Wants to [feature] ...



これは最も一般的な形式ですが、必須ではありません。物語は、機能的な複雑さに依存するものであれば、どのようなテキストでもかまいません。

    シナリオをDRYに保つために、シナリオの概要を自由に使ってください。

  Scenario Outline: User cannot register with invalid e-mail
   When I try to register with an email "<email>"
   Then I should see the error message "<error>"

  Examples:
   |email |error |
   |The e-mail is required|
   |invalid email |is not a valid e-mail |



    シナリオのステップは、step_definitions ディレクトリにある .rb ファイルに配置されます。ステップファイルの命名規則は、[description]_steps.rb です。ステップは、異なる基準に基づいて、異なるファイルに配置されます。ステップファイルは、1つの関数(home_page_steps.rb)に対して1つだけ存在する可能性があります。
    . また、各オブジェクト固有の機能のためのステップファイル(article_steps.rb)が存在する場合もあります。

    ステップパラメータは複数行で使用し、繰り返しを避ける

    シナリオ 

User profile
   Given I am logged in as a user "John Doe" with an e-mail "[email protected]"
   When I go to my profile
   Then I should see the following information:
    |First name|John
    |Last name |Doe
    |E-mail |[email protected]|

  |Doe |E-mail || Step:
  Then /^I should see the following information:$/ do |table|
   table.raw.each do |field, value|
    find_field(field).value.should =~ /#{value}/
   end
  end



    複合ステップでシナリオをDRYに保つ

    # ...
    技術ニュース」カテゴリのニュースを購読したいのですが、どうすればよいですか?
    # ...

    # Steps:
    カテゴリ "([^"]*)"$/ のニュースを購読する場合|category|を実行します。
      ステップ %Q{
        ニュースカテゴリーのページを表示すると
        そして、カテゴリ#{category}を選択します。
        そして、ボタン "このカテゴリを購読する"をクリックします。
        そして、購読を確認します。

    終了

    カピバラでは、常にshould_notを使ったポジティブなケースではなく、ネガティブなマッチを使用するようにしましょう。より詳しい説明はCapybaraのRead Meファイルを参照してください。