我的问题是:知道子模块何时完全加载并完成合成的最佳方法是什么,以便我可以测试该模块的 html 内容?
我正在尝试编写一些在路由完全完成组合后运行的集成测试。
因此,我构建测试的方式是:
在“导航()”调用之前,我附加:
router.on('router:navigation:composition-complete', callback)
接下来我调用:
router.navigate('parent/child')
我的测试代码在“路由器:导航:组合完成”的回调中
问题是,该路线正在调用子路线。也就是说,父路由指向加载子路由的模块。路由在我的应用程序中运行良好,但是当我在测试中侦听“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') 它会在 parent/index.js 加载后立即触发 composition-complete 事件,而不是在 parent/viewmodels/child.js 加载时触发。