2

我的问题是:知道子模块何时完全加载并完成合成的最佳方法是什么,以便我可以测试该模块的 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 加载时触发。

4

1 回答 1

1

我不确定这是否:Durandal 路由器 / 使用 childRouter 时的生命周期事件可以在这里为您提供帮助,但我认为这个想法是相同的

于 2014-03-30T21:26:09.320 回答