2016-12-01 13 views

答えて

3

あなたが本当に必要とするのは、正しい引数(ログインページのルート)でrouter navigateメソッドが呼び出されたかどうかをテストすることだけです。実際のナビゲーションをテストしようとすると、単体テストの場合よりも多くの副作用が発生する可能性があります。

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

'let nav = {setRoot:jasmine.createSpy( 'setRoot')}' –

0

Angularチームは、角度環境のすべてのネイティブな側面にテストを組み込むことが難しくなっています。ネイティブ角度ルータを使用している場合は、使用するためのテストが構築されています。チェックアウトはBLOGです。あなたが角度ルータを使用していない場合は、あなた自身の上にあると私は思う。

関連する問題