2016-02-01 27 views
7

私はrouteLinkを使用している最も簡単なコンポーネントを書いていますとコンポーネントのテスト:私はこのコンポーネントをテストしようとすると、角度2:ルータ

@Component({ 
    selector: 'memorySnippet', 
    templateUrl: '<div class="memory-snippet-wrapper" *ngIf="memory" 
        [routerLink]="['MainPanel', 'MemoryPanel', {'id' : this.memory.id}]">', 
    directives: [CORE_DIRECTIVES, ROUTER_DIRECTIVES] 
}) 
export class MemorySnippetComponent { 
    @Input() memory: Memory; 
} 

問題が発生します。私はカルマが不足しているプロバイダ文句を言っているルータのリンクを追加瞬間:すべてのプロバイダを追加した後

をカルマ求めている私はこれを取得:

beforeEachProviders(() => [ 
    MemorySnippetComponent, 
    MEMORY_SERVICE_PROVIDERS, 
    ROUTER_PROVIDERS, 
    ApplicationRef 
]); 

をしかし、私は、テストを実行すると、私はこのエラーを取得:

EXCEPTION: EXCEPTION: Error during instantiation of Token RouterPrimaryComponent! (RouterLink -> Router -> RouteRegistry -> Token RouterPrimaryComponent).

ORIGINAL EXCEPTION: unimplemented

ORIGINAL STACKTRACE: Error: unimplemented

何が間違っていますか? Angular 2(2.0.0-beta.1)は、ルータ指令でコンポーネントをテストする準備ができていませんか?

+0

。まだベータ版であり、この種のテストではテストガイドは公開されていません。おそらく、ソースでRouterPrimaryComponentを見つけてインタフェースを実装し、 'provide(RouterPrimaryComponent、{useClass:MyRouterPrimaryComponent})'を使ってそれをオーバーライドし、おそらくあなたのテストを動作させることができます。 – SnareChops

+0

Angularチームのテストシードでレポを確認してください - > https://github.com/juliemr/ng2-test-seed this talk https://www.youtube.com/watch?v=C0F2E-PRm44 –

+0

構文には返答が必要ないのですか? 'beforeEachProviders(()=> {戻り値[ MemorySnippetComponent、 MEMORY_SERVICE_PROVIDERS、 ROUTER_PROVIDERS、 ApplicationRef ]}); –

答えて

5

...

beforeEach(() => addProviders([ 
    APP_ROUTER_PROVIDERS, // must be first 
    {provide: APP_BASE_HREF, useValue: '/'}, // must be second 
    {provide: ActivatedRoute, useClass: Mock}, 
    {provide: Router, useClass: Mock} 
])); 

このアプローチを使用してgithubのプロジェクトがある...

https://github.com/danday74/angular2-coverage

9

あなたはのように見えるbeforeEachProviders方法が必要です。

import {MockApplicationRef} from '@angular/core/testing'; 

beforeEachProviders(() => [ 
    ROUTER_PROVIDERS, 
    provide(APP_BASE_HREF, {useValue: '/'}), 
    provide(ROUTER_PRIMARY_COMPONENT, {useValue: YourComponent}), 
    provide(ApplicationRef, {useClass: MockApplicationRef} 
]); 

MockApplicationRefはテストのこの種のためのフレームワークが提供されます。このエラーの私の解釈だろう

今使用して新しいルータとRC4用
+0

@cexbrayatありがとう、それは働いた!あなたはそのようなドキュメンテーションのソースを指摘していただけますか? –

+0

これは私の電子ブック^^ books.ninja-squad.comの単体テストです。しかし、フレームワークのソースコードAFAIRで見つけたと思います。 – cexbrayat

+0

素晴らしい本、ありがとう! –