私の質問は次のとおりです。子モジュールが完全にロードされ、構成が完了したことを知る最善の方法は何ですか?そのモジュールの html コンテンツをテストできますか?
ルートの構成が完全に終了した後に実行されるいくつかの統合テストを作成しようとしています。
したがって、テストを構造化する方法は次のとおりです:
「navigate()」呼び出しの直前に、添付します:
router.on('router:navigation:composition-complete', callback)
次に呼び出します:
router.navigate('parent/child')
そして、テスト コードは「router:navigation:composition-complete」のコールバックにあります。
問題は、ルートが子ルートを呼び出していることです。つまり、子ルートをロードするモジュールを指す親ルートです。私のアプリケーションではルーティングは正常に機能しますが、テストで 'router:navigation:composition-complete' イベントをリッスンすると、子モジュールがロードされる前に、親モジュールがロードされた直後にイベントが発生します。
また、これは 2 番目のテストでのみ発生します。つまり、ルートに移動するテストが 1 つある場合、子モジュールが正しく読み込まれた後にイベントが発生します。次に、そのテストが実行された後、新しいテストで新しいルートに移動してテストできるようにすると、イベントは親モジュールがロードされた直後にのみ発生します。
SO、子モジュールの構成が完全に終了したことを適切に知るにはどうすればよいですか?
私が見ている問題をよりよく理解するために、ルートがどのように構成されているかの例を次に示します。
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/viewmodels/child.js が読み込まれたときではなく、parent/index.js が読み込まれた直後に、composition-complete イベントを発生させます。