2016-07-05 8 views
0

私はうっとうなhtmlコンポーネントから呼び出される、機能するWCMUsePojo Groovyクラスを持っています。 Prosper設定メソッドの内容に基づいてテスト用のWCMUsePojoクラスのインスタンスを作成しようとしています。Prosperの仕様でWCMUsePojoのインスタンスを作成するには?

これは基本的にHow can I create an instance of WCMUsePojo in a servlet for a specific page?と同じタイプの質問ですが、私はそれが答えではないと考えています。これは具体的には、Prosperフレームワーク内のWCMUsePojoクラスのテスト方法をどのようにするかについてです。 Sightlyのdata-sly-use属性に相当するJavaまたはGroovyはありますか?

def setupSpec() { 
    pageBuilder.content { 
     page_with_new_gridwrapper { 
      'jcr:content'{ 
       'gridpar' { 
        'my_gridwrapper'('sling:resourceType':'my/components/my_gridwrapper') { 

        } 
       } 
      } 
     } 
    } 
} 

def "Test Page with New Grid Container"(){ 
    Page page = pageManager.getPage("/content/page_with_new_gridwrapper") 

// the following 2 lines return null :-( 
// but I would prefer these to return an object with the type MyGridContainerHelper 
    MyGridContainerHelper cmp = page.getContentResource().getChild("gridpar/my_gridwrapper").adaptTo(MyGridContainerHelper.class) 
    Component cmp2 = WCMUtils.getComponent(page.getContentResource().getChild("gridpar/my_gridwrapper")) 

    expect: 
    page != null //passes 
    page.getContentResource().getChild("gridpar/my_gridwrapper") != null //passes 
    cmp != null // fails 
    cmp2 != null // fails 
    cmp.resourceType == "my/components/my_gridwrapper" // fails 

} 

答えて

0

私は、オブジェクトをインスタンス化し、私がテストしていたリソースを含むSimpleBindingsオブジェクトを渡し、initメソッドを呼び出すことになりました。これは私の目的のためにうまくいくようです。

MyGridContainerHelper gridContainer = new MyGridContainerHelper(); 
SimpleBindings bindings = new SimpleBindings() 
bindings.put("resource", page.getContentResource().getChild("gridpar/my_gridwrapper")) 
gridContainer.init(bindings) 
1

リソース・オブジェクトからMyGridContainerHelperのインスタンスを適応させるために、あなたはむしろWCMUsePojoを拡張するよりも、Sling Modelsを使用して、ヘルパークラスを実装することができます。繁栄は、あなた仕様のsetupSpecブロックで次の構文を使用して@org.apache.sling.models.annotations.Model -annotatedクラスの登録をサポートしています。

slingContext.addModelsForPackage("helper.class.package.name") 

これは、手動でBindingsオブジェクトを作成し、POJOを初期化する必要がなくなります。スリングモデル工場があなたのためにすべての仕事をします。 Sightlyの "use"属性はResourceまたはSlingHttpServletRequestから適応可能なクラスをサポートしているため、既存のSightlyテンプレートに追加の変更は必要ありません。

+0

答えをありがとう。プロジェクトには多くのWCMUseクラスがあり、それらをすべてSling Modelsに変換する準備が整っていません。今後、私はこのソリューションを確かに考えていきます。元の質問は既存のWCMUseクラスのテストを追加することだから、おそらく私のSimpleBindingsの回答を受け入れることになるでしょう。 –

関連する問題