2016-12-01 56 views

回答

3

您真正需要做的就是測試路由器導航方法是否使用正確的參數(即登錄頁面的路由)進行調用。嘗試測試實際的導航可能會導致比單元測試所需的副作用更多的副作用。

要檢查是否調用了Router.navigate方法,只需使用存根和間諜就可以了。

@Component({}) 
class SomeComponent { 
    constructor(private router: Router) {} 

    logout() { 
    this.router.navigate(['/login']) 
    } 
} 

let routerStub; 

beforeEach(() => { 
    routerStub = { 
    navigate: jasmine.createSpy('navigate'); 
    } 
    TestBed.configureTestModule({ 
    declaration: [ SomeComponent ], 
    providers: [ 
     { provide: Router, useValue: routerStub } 
    ] 
    }); 
}); 

it('it should navigate to login after user logs out',() => { 
    let component = TestBed.createComponent(SomeComponent).componentInstance; 
    component.logout(); 

    expect(routerStub.navigate).toHaveBeenCalledWith(['/login']); 
}) 
+0

我沒有使用路由器。相反,使用NavController。對此有何建議? – devtiwa

+0

爲NavController創建一個存根,並在'push'方法或'setRoot'上偵察。哪一個你正在使用 –

+0

'讓導航= {setRoot:jasmine.createSpy('setRoot')}' –

0

Angular團隊努力將測試融入角度環境的所有本地方面。如果您使用本地角路由器,那麼他們已經構建了測試供您使用。看看這個BLOG。如果你沒有使用角度路由器,那麼你認爲自己是獨立的。