web-dev-qa-db-ja.com

単一のガーキンシナリオで複数のグループを指定/時間/その後にしてもよいですか

私はガーキンで受け入れテストを書いており、初期アクションに基づいてWebアプリのUIの複数の変更をテストしたいと考えています。次に例を示します。

        Scenario: Cancel editing a new text asset
            Given the user "[email protected]" is logged in
            When the user navigates to "/build/"
            And the user clicks the "Sandbox" link
            And the user inputs "Test story for canceling editing of a new text asset" for the "title" field
            And the user inputs "Test User" for the "byline" field 
            And the user inputs "My summary, so exciting!" for the "summary" textarea
            And the user clicks on "Untitled Section" in the section list
            And the user clicks the "Text" icon in the "center" container 
            And the user inputs the following text in the rich text editor:
                    """
                    Test text for asset. This is cool. 
                    """
            And the user clicks the "cancel" button
            Then the following text is not present: 
                    """
                    Test text for asset. This is cool. 
                    """
            And the "Image" icon is present
            And the "Text" icon is present
            When the user refreshes the browser 
            And the user clicks on "Untitled Section" in the section list
            Then the following text is not present:
                    """
                    Test text for asset. This is cool. 
                    """
            When the user opens the asset drawer
            Then the following text is not present:
                    """
                    Test text for asset. This is cool.
                    """

初期アクションの応答をテストするために、When/Thenステップのグループが複数あることに注意してください。ほとんどのステップの実装はprefixキーワードを無視し、このテストを実行できると確信していますが、さまざまな結果をテストするためのより良い方法はありますか?同じ設定で異なる "Then"ステートメントを使用して複数のシナリオを記述する方が良いでしょうか?

20
Geoffrey Hing

一度に1つの動作/機能のみをテストする必要があることに注意してください。経験則では、1つのWhenステップのみを使用する必要があります。

Given some state before action
  And some other state before action
  ...
When  only one action
Then  assert correct output
  And assert correct output
  ...

ご覧のとおり、Whenの下にAndsがない、Whenの1行のみ。代わりに多くのWhenステップを使用する場合は、仕様ではなくテストスクリプトを作成します。テストが理解しにくくなり、基礎となる実装が変更されると、ますます多くのステップが追加されることに気づくでしょう。

また、無関係なものを変更するたびに変更したくないので、基礎となるロジックを非表示にしておく必要もあります。例:

そして、ユーザーは「私の要約、とてもエキサイティングです!」と入力します。 「要約」テキストエリア

集計フィールドをテキストエリアから入力タイプに変更するとどうなりますか?シナリオを変更する(メンテナンスの悪夢)か、シナリオを横にしたままにする必要があります(シナリオがないことよりも悪い)。代わりに書く必要があります:

When the user describes it as "so exciting!"

しかし、それでも、シナリオ全体の構造は悪いです。あなた自身に質問してください:私がチェックしたいことは?私がその機能のビジネスロジックを理解したい人だったら、次のようなものを見たいと思います。

Scenario: Cancel editing a new text asset
  Given I edit the Sandbox details with some data
  When  I cancel editing
  Then  Sandox details should be empty

それでおしまい!

それを達成する方法は?すべての無関係なロジックをより深く移動し、 PageObject pattern などを使用します。そして 例による指定 について読んでください。

27