12

ある機能を別の機能の「与えられた」ものとして再利用することは可能ですか?

それとも、やるべきではないことをやろうとしているのでしょうか

基本的に私の機能は次のようになります:

Scenario: Creating a basic account with valid details (happy path)
  Given I am on the "signup" page
  And I enter all the right details #this is shortened of about 20 steps for your reading ease
  When I press the button labelled "Sign up"
  Then I should see the text "Thanks for signing up"
  And I should have an email from "confirmation@mysite.com" titled "Confirm your account Michael"
  And the database should contain a record for the user marked as unconfirmed

Scenario: Confirming account via email
  Given I have created a basic account
  When I open the confirmation email and visit the url to confirm the account
  Then I should be logged in
  And the database should contain a record for the user makred as confirmed

すべての機能を個別に実行できるようにする必要があるため、すべての機能の後でDBをクリアします...

私はこれを間違った方法で行っていますか?

ありがとう

4

3 に答える 3

13

問題

実際に試みているのは、シナリオを再利用することです。これはCucumberではサポートされなくなりました。

このアプローチに関する他の問題は別として、次のようになるため、テストは遅くなり、相互に依存します。

  1. ブラウザを介してアカウントの作成を促進し、
  2. すべてのテストをアカウント作成テストの合格に依存させます。

そうしないでください。

キュウリの道

通常、ステップ定義を再利用することはできますが、独立して機能するようにテストを作成する必要があります。したがって、一般的なケースでは、次のような共有ステップを追加することをお勧めします。

  1. ユーザーアカウント「TestUser」が存在しない場合
  2. ユーザーアカウント「TestUser」が存在する場合

その後、必要に応じてシナリオに含めることができます。このアプローチの良いところは、手順によってユーザーをプログラムで作成または削除できることです。

または、ほとんどのテストが既存のアカウントで行われる場合は、適切なユーザーフィクスチャがすでに配置されているデフォルトのデータセットを設定します。アカウントの作成をテストする限られたサブセットの場合は、ユーザーの削除を促進するシナリオの背景を追加するだけです。

于 2012-05-30T08:59:04.727 に答える
1

Javascriptを使用している場合は、次のようにしてシナリオを呼び出すためのreuse-cucumber-scenariosという名前のパッケージを作成しました。

Given the scenario "@scenario_tag"

Given the scenario "@scenario_tag" with parameters
"""
{
  "1": ["step1_param1", "step1_param2"],
  "2": ["step2_param1", "step2_param2", "step2_param3"],
  "3": ["step3_param1", "step3_param2", "step3_param3"],
}
"""

またはガーキン変数を作成しています...

Given the variable "$variable_name" is equal to
"""
#JSON object
"""

またはシナリオ関数を作成し、実行してそれらを呼び出します...

Given the scenario "@$scenario_function_tag" where variable "$variable_name" is "value_to_replace"

もっと...

于 2018-03-25T04:57:22.290 に答える
0

現在、次のアプローチを使用できます。

Background:
  Given Some common setup
  And Some more setup

Scenario: one
  When setup1
  Then something1

Scenario: two 
  When setup2
  Then something2
于 2021-04-07T16:22:02.937 に答える