如何在我的 Prosper 规范中创建 WCMUsePojo 实例?
How to create instance of WCMUsePojo in my Prosper spec?
我有一个正常运行的 WCMUsePojo Groovy class,它是从一个视觉 html 组件调用的。我正在尝试创建我的 WCMUsePojo class 实例以根据 Prosper 设置方法中的内容进行测试。
它基本上是与 How can I create an instance of WCMUsePojo in a servlet for a specific page? 相同类型的问题,但我没有看到它得到回答,这是关于如何在 Prosper 框架内的 WCMUsePojo classes 中对方法进行单元测试的。是否有 Java 或 Groovy 等同于 Sightly 的 data-sly-use 属性?
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
}
我最终实例化了对象并调用了传入包含我正在测试的资源的 SimpleBindings 对象的 init 方法。这似乎很适合我的目的。
MyGridContainerHelper gridContainer = new MyGridContainerHelper();
SimpleBindings bindings = new SimpleBindings()
bindings.put("resource", page.getContentResource().getChild("gridpar/my_gridwrapper"))
gridContainer.init(bindings)
要从资源对象改编 MyGridContainerHelper
的实例,您可以使用 Sling Models 而不是扩展 WCMUsePojo
来实现您的助手 class。 Prosper 通过在规范的 setupSpec
块中使用以下语法支持注册 @org.apache.sling.models.annotations.Model
-注释的 classes:
slingContext.addModelsForPackage("helper.class.package.name")
这样就不需要手动构造一个Bindings
对象和初始化POJO; Sling 模型工厂为您完成所有工作。由于 Sightly 的 "use" 属性支持可从 Resource
或 SlingHttpServletRequest
改编的任何 class,因此您现有的 Sightly 模板无需进行额外更改。
我有一个正常运行的 WCMUsePojo Groovy class,它是从一个视觉 html 组件调用的。我正在尝试创建我的 WCMUsePojo class 实例以根据 Prosper 设置方法中的内容进行测试。
它基本上是与 How can I create an instance of WCMUsePojo in a servlet for a specific page? 相同类型的问题,但我没有看到它得到回答,这是关于如何在 Prosper 框架内的 WCMUsePojo classes 中对方法进行单元测试的。是否有 Java 或 Groovy 等同于 Sightly 的 data-sly-use 属性?
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
}
我最终实例化了对象并调用了传入包含我正在测试的资源的 SimpleBindings 对象的 init 方法。这似乎很适合我的目的。
MyGridContainerHelper gridContainer = new MyGridContainerHelper();
SimpleBindings bindings = new SimpleBindings()
bindings.put("resource", page.getContentResource().getChild("gridpar/my_gridwrapper"))
gridContainer.init(bindings)
要从资源对象改编 MyGridContainerHelper
的实例,您可以使用 Sling Models 而不是扩展 WCMUsePojo
来实现您的助手 class。 Prosper 通过在规范的 setupSpec
块中使用以下语法支持注册 @org.apache.sling.models.annotations.Model
-注释的 classes:
slingContext.addModelsForPackage("helper.class.package.name")
这样就不需要手动构造一个Bindings
对象和初始化POJO; Sling 模型工厂为您完成所有工作。由于 Sightly 的 "use" 属性支持可从 Resource
或 SlingHttpServletRequest
改编的任何 class,因此您现有的 Sightly 模板无需进行额外更改。