2016-12-06 77 views
3

我正在努力弄清楚如何將angular的激活路線存根到我的目的。在我的組成部分之一,我使用的路由快照得到激活路由的URL的一部分:Stub ActivatedRoute在Angular 2中的測試

let activatedPath = this.route.snapshot.children[0].url[0].path; 

在我的測試中,我發現了錯誤:

Error: Error in :0:0 caused by: undefined is not an object (evaluating 'this.route.snapshot.children[0].url')​​ 

所以我想我需要存根激活路線:

class FakeActivatedRoute { 
    // stub detail goes here 
} 

,並在我的測試爲它提供:

beforeEach(async(() => { 
    TestBed.configureTestingModule({ 
     imports: [RouterTestingModule], 
     declarations: [ 
     SiteAdminComponent 
     ], 
     schemas: [NO_ERRORS_SCHEMA], 
     providers: [ 
     { provide: ActivatedRoute, useClass: FakeActivatedRoute } 
     ] 
    }) 
    .compileComponents(); 
})); 

任何人都可以提供任何指導方面的存根實施,讓我去.snapshot.children[0].url[0].path?我目前毫無進展迅速:-)

+0

搜索[angular testing guide]上的'ActivatedRoute'(https://angular.io/docs/ts/latest/guide/testing.html)。有一個存根的例子。但是,我正試圖爲自己實現它,但我不知道如何設置組件創建時的testParams _before_。也許我們可以互相幫助? :) – 27leaves

+0

我現在也有_how注入部分。它可以在提供程序中的'activatedRoute = new ActivatedRouteStub();'在beforeEach'和'{provide:ActivatedRoute,useValue:activatedRoute}'中使用。 我沒有使用快照,所以我不能幫你解決這個問題,但我認爲以此爲出發點,它不應該那麼難;) – 27leaves

+0

有關這方面的消息嗎?我也在苦苦掙扎。 – Striped

回答

1

你應該能夠做這樣的事情:

beforeEach(async(() => { 
    TestBed.configureTestingModule({ 
     imports: [RouterTestingModule], 
     declarations: [ 
     SiteAdminComponent 
     ], 
     schemas: [NO_ERRORS_SCHEMA], 
     providers: [ 
     { 
      provide: ActivatedRoute, 
      useValue: {snapshot: {children: [{url: ['your/path/here']}]}} 
     } 
     ] 
    }) 
    .compileComponents(); 
})); 

這樣,你所提供的是嘲笑activatedRoute對象將回答這個完全相同的層次結構。