2013-06-26 12 views
7

私はimperative and declarative cucumber stepsの違いを理解していますが、私はこれについて実際の例は見ていません。私のフィーチャファイルが冗長すぎるような気がする。CRUD操作を記述するための宣言的なキュウリの機能を書くには?

ライフサイクルの各段階のためのキュウリの機能があることが必要となるように思え:

  • foobars/list_foobars.feature
  • foobars/create_foobar.feature
  • foobars/view_foobar.feature
  • foobars/edit_foobar.feature
  • foobars/delete_foobar.feature

作成機能だけでは、入力可能なフィールド、必要なフィールド、無効なデータを入力するときの処理などをリストしたいと思うようです。私は宣言的なやり方を知らないこの。もちろん後続の機能では、すべての手順を経て作成するのではなく、Given a foobar existsと言うだけです。

アプリケーションの動作を詳しく説明していますか?あなたは受け入れられていると感じるフィーチャー・ファイルのいくつかの例を提供できますか?

答えて

4

私はそうのように、私はシナリオをしたいと思い、私たちは無効なデータとfoobarのを編集するための物語を持っていると仮定すると、読める人間キュウリのテストを維持したい:私はそれは私たちが出て欲しいものキャプチャ考える

# foobars/edit_foobar.feature 
Feature: As a user, I want to edit a Foobar, so I can Baz 

Scenario: Validation Errors 
    Given I am logged in as a user 
    And a foobar exists 
    And I edit the foobar with invalid data 
    Then I should see validation errors 

どのフィールドを編集するか、どのボタンを送信するかなどの詳細をすべて処理する必要はありませんが、可能性のあるすべてのケースをテストするわけではありませんが、実際にユニットテスト(モデルテスト)フラッシュメッセージが設定されているかどうかをテストしたり、エラーが発生しているかどうかをテストするように要求します。

他のシナリオは似ています。

Scenario: Successful Edit 
    Given I am logged in as a user 
    And a foobar exists 
    And I edit the foobar with valid data 
    Then I should see the valid data 

一部の人々は、テスト自体の一部として有効なデータを指定したいと思うでしょうが、私は個人的にシナリオを維持するために、ステップの定義にこれらを委任することを好みますクリーン。これは、すべてのフォームフィールドが動作することをテストする適切な場所ではないので、ゴールデンケースが機能するかどうかを確認するための例が1つだけ必要です(すべての単一フィールドを指定するとメンテナンスの頭痛になる)。

+0

興味深い、ありがとう:

はまた多分1は、このような何かを行うことができます!フォローアップの質問:ビジネスロジックを伝えるためにキュウリの機能を使ったことはありますか?有効なデータまたは無効なデータと呼ばれる1つのステップを持つことによって、ビジネスロジックの重要な部分であるかもしれない動作を隠しているようです。たとえば、ビジネスロジックによってどのフィールドが必要なのかが判断されるため、「必須フィールドに入力してください」などの手順で十分に通信できない場合があります。思考? – Andrew

+2

特定のフィールドを必要とするビジネス上の理由がある場合もありますが、フィールドの保存が必要な場合は、メールでマーケティング資料を送ろうとするようなこともあります。 、またはユーザーが電子メールでログインできるようにしたい場合)。後者の場合、必要なフィールドは実装の詳細なので、ユニットテストを行う必要があります。前者の場合、具体的には、特にキュウリ試験を使用して製品の所有者と連絡をとっている場合には、具体的なテストを書くことができます。 –

+0

これは質問に答えません。 –

-1

私はキュウリを使ってこれを全くテストしていないかもしれないと思っていますが、フィーチャーセクションでコメントを作成するだけです。

# categories.feature 

Scenario: Manage categories 
    Given I want to manage categories 
    When I <crud_type> a category 
    Then I should be taken to the listing page 

    Examples: 
     | crud_type | 
     | create | 
     | edit  | 
     | delete | 

Scenario: View category 
    Given I want to view a particular category 
    When I click on a category in the category list 
    Then I should see that category's view page 
+0

気をつけてくださいdownvoteを説明する? –

関連する問題