我的问题是:什么是了解子模块何时完全加载和完成合成的最佳方法,以便我可以测试该模块的html内容?
我正在尝试编写一些在路线完全完成构图后运行的集成测试
因此,我测试结构的方式是:
在'navigate()'调用之前,我附上:
router.on('router:navigation:composition-complete', callback)
接下来我打电话:
router.navigate('parent/child')
我的测试代码在'router:navigation:composition-complete'
问题是,路由正在调用子路由。也就是说,父路由指向加载子路由的模块。路由在我的应用程序中工作正常,但是当我在我的测试中监听'router:navigation:composition-complete'事件时,事件在父模块加载之后立即触发,在子模块甚至加载之前。 此外,这仅适用于第二次测试。我的意思是,如果我有一个导航到路线的测试,则在子模块正确加载后触发事件。然后在该测试运行之后,如果我在新测试中导航到新路由以便我可以测试,该事件仅在父模块加载后立即触发。
那么,我怎样才能正确地知道子模块何时完成组合,以便我可以测试模块的html内容?
以下是我的路线结构的示例,以便更好地了解我看到的问题:
router.map([
/*{durandal:routes}*/
{"route": 'parent*details',"moduleId":"parent/index","title":"Parent", hash: '#parent'}
]).buildNavigationModel();
然后在parent / index.js中我有这个:
var childRouter = router.createChildRouter()
.makeRelative({
moduleId:'',//refers to the 'parent' folder
fromParent: true
})
.map([
{ route: 'child', moduleId: 'parent/viewmodels/child', title: 'Child', type: 'intro', nav: true}
]).buildNavigationModel();
那么如果我调用:router.navigate('parent / child')它会在父/ index.js加载后立即触发composition-complete事件,而不是在父/ viewmodels / child.js加载时。
答案 0 :(得分:1)
我不确定这个:Durandal router / lifecycle events when using a childRouter可以帮助你,但我认为这个想法是一样的