2017-06-27 12 views
2

私はAngular 4 WebアプリケーションをテストするためにGeb(1.1.1)とSpock(1.1-groovy-2.4)とセレンドライバ(2.53.1)を使用しています。単一ページのWebアプリケーションがあり、モジュールの階層構造になるようにコンテンツを設定したい場合は、ページオブジェクトに移動するとモジュールの階層を調べてコンテンツを確認する方法を教えてください。例えば、私は以下のページクラスを持っている場合:Gebモジュールを別のGebモジュールのコンテンツとして使用してコンテンツを検証する方法は?

class HomePage extends Page { 
    static url = 'home' 
    static at = { 
     title == 'Home Page' && mainViewModule.displayed 
    } 
    static content = { 
     mainViewModule { module MainViewModule } 
    } 
} 

、その後MainViewModuleは、このように定義されています

class MainViewModule extends Module { 
    static content = { 
     mainView { $('div', class: 'main-view') } 
     dashboardModule { module DashboardModule } 
    } 
} 

その後、DashboardModule:

class DashboardModule extends Module { 
    static content = { 
     dashboard = { MainViewModule.find 'dashboard' } 
     subModule1 = { module SubModule1 } 
     subModule2 = { module SubModule2 } 
    } 
} 
サブモジュールは、一般的に次のようになり

class SubModuleX extends Module { 
    static content = { 
     ... 
    } 
} 

場合は、次の操作を行い、私のテスト(スポックを使用して):

class SomeSpec extends GebReportingSpec { 
    def 'navigate to the home page'() { 
     when: 
     to HomePage 

     then: 
     at HomePage 
    } 
} 

は、どのように私はそれがモジュールの階層を通じてだけでなく、ダウン、ホームページのクラスで定義された内容を検証していることを確認することができますか?私はコードを(上記のように)持っている方法、私はセレクタを間違った値に変更することができますが、それでもテストは失敗しません。

これは単一ページアプリケーションなので、HomePageクラスを長すぎるようにしないようにしたいので、モジュールを使用してページの部分と機能を論理的な部分に分割することは意味があります。私は、より上位の(または含まれている)モジュールを拡張して構成するのではなく、集約を介してモジュールを関連付ける方が好きであり、集約されたモジュールの階層を介してコンテンツを検証できるはずですが、私の仮定が間違っていれば。私が前提に間違っている場合、どのようにこれにアプローチして、HomePageクラスのすべてを含めるのを避けるべきですか?

おかげで、 スティーブ

答えて

0

あなたはこのような何かを行うことができ

class DashboardModule extends Module { 
    static content = { 
     dashboard = { MainViewModule.find 'dashboard' } 
     subModule1 = { module SubModule1 } 
     subModule2 = { module SubModule2 } 
    } 
    def verify(){ 
     try{ 
      //assert content for this module here 
      return subModule1.verify() && subModule2.verify() 
     } 
     catch(GebAssertionError ae){ 
      return false 
     } 
    } 
} 

を、私はあなたがパターンに従うことができると仮定しますあなたができない場合は私に知らせてください、そして私はさらに説明します。

2

ではなくモジュールの巨大な継承チェーンを持って、あなたのページは、単一のモジュールが含まれていたが、私が直接あなたのページに、各モジュールを追加します。

各モジュールを静的なページに追加して表示することもできますが、このチェックではモジュール内のすべてのコンテンツが表示されることはありません。

あなたがこれを行うことを望むなら、あなたのような、個別に各要素をチェックする必要があります場合は、しかし、

myModule.anotherModule.yetAnotherModule.myButton.displayed 

:あなたは、モジュールは、あなたがで終わるモジュールを継承している場合は

myModule.myButton.displayed 

テストが失敗するページに存在しないモジュールコンテンツと対話しようとするため、ページアットマーク内のアサーションの負荷を過度に感じるように見えます。

あなたのページを作成しないで、コンテンツを分割するためにいくつかのモジュールを追加して、気になるすべての要素が存在すると主張するクイックスモークテストを作成してみませんか?

"at"チェックを使用してページコンテンツをアサートすると、ページにナビゲートするすべてのテストですべてのコンテンツが存在すると主張するのに多くの時間がかかります。DashboardModuleに続いて

class MainViewModule extends Module { 
    static content = { 
     mainView { $('div', class: 'main-view') } 
     dashboardModule { module DashboardModule } 
    } 

    def verify(){ 
     try{ 
      //assert content for this module here 
      return dashboardModule.verify() 
     } 
     catch(GebAssertionError ae){ 
      return false 
     } 
    } 
} 

:あなたのmainViewModuleの内部その後、

class HomePage extends Page { 
    static url = 'home' 
    static at = { 
     title == 'Home Page' && mainViewModule.verify() 
    } 
    static content = { 
     mainViewModule { module MainViewModule } 
    } 
} 

関連する問題