2016-10-20 5 views
3

私はAngular2(2.1.0)の最終リリースを使用しています。単体テスト時にどのコンポーネントをインポートするのかをどのように知っていますか?

...

beforeEach(async(() => { 
    TestBed.configureTestingModule({ 
     imports: [AppModule], 
     ... 

を使用してユニットテストは、しかし、これは、テストの実行が遅い作ったとき、私はAppModuleを経由して、すべてのコンポーネントをインポートしました。

私は今...次のように私は必要なコンポーネントのみをリストアップしています

beforeEach(async(() => { 
    // noinspection JSUnusedGlobalSymbols 
    TestBed.configureTestingModule({ 
     imports: [BrowserModule, FormsModule, HttpModule], // modules 
     declarations: [ 
     // pipes 
     AttributeCheckPipe, 
     // directives 
     // DatePickerDirective, 
     ... 

はしかし、私はたくさんおよび部品の多くを持っていると私は、インポートするものを確認していません。テスト出力では、インポートする必要があるものは教えられません。それはただ単に渡すとき(私がそれらをすべてインポートするとき)または失敗する(もしそうでなければ)が、どれが必要かを教えてくれない。

エラー迷惑/役に立たない。..

[email protected]_modules/zone.js/dist/zone.min.js:1:36996 
[email protected]_modules/zone.js/dist/proxy.min.js:1:2190 
[email protected]_modules/zone.js/dist/zone.min.js:1:36939 
[email protected]_modules/zone.js/dist/zone.min.js:1:31466 
[email protected]_modules/zone.js/dist/zone.min.js:1:17818 
[email protected]_modules/core-js/client/shim.min.js:8:19058 
node_modules/core-js/client/shim.min.js:8:19180 
[email protected]_modules/core-js/client/shim.min.js:8:14294 
[email protected]_modules/zone.js/dist/zone.min.js:1:18418 
[email protected]_modules/zone.js/dist/zone.min.js:1:18175 
node_modules/zone.js/dist/zone.min.js:1:18715 

にはどうすればいいのコンポーネントは、私がインポートに失敗したかについてのフィードバックを得るのですか? thx

私はKarmaとPhantomJSを使用しています。

私のカルマの設定の抜粋は

client: { 
    captureConsole: true 
}, 
logLevel: config.LOG_DEBUG 
+0

この質問に答えるには、あなたのコンポーネントとそのテンプレートを確認する必要があります –

+0

ああ、私はなぜ、他のコンポーネント/パイプなどを見たいのですか?テンプレートにはどのコンポーネントが使用されていますか?これらのコンポーネントが使用しているコンポーネントは何ですか?私は正しい行を考えていますか?あなたが忘れてしまったことだけをログに記録する簡単な方法はありませんか? – danday74

+1

かなり。通常、コンポーネントをロードして、テスト宣言に欠落しているディレクティブを指定しようとすると、テンプレートの解析に関するエラーが発生し、要素のバインディングが見つかりません。そんな感じ。しかし、一般的には、あなたが必要なものをすでに知っているはずです。あなたはコンポーネントを作成し、あなたが使ったものを知っています –

答えて

5

が最後にここにいくつかの進歩を遂げて...です。私はをキャッチブロックをコンパイルコンポーネント()に追加し、e.messageを記録しました。相続人

私のコード..

beforeEach(async(() => { 
    TestBed.configureTestingModule({ 

     imports: [FormsModule, HttpModule, routing], // modules 

     declarations: [ 
     SaveSearchModalComponent 
     ], 
     providers: [ 
     ESQueryService, 
     RESTQueryService, 
     ] 
    }).compileComponents() 
     .then(() => { 
     fix = TestBed.createComponent(SaveSearchModalComponent); 
     instance = fix.componentInstance; 
     injector = fix.debugElement.injector; 
     }).catch((e) => { 
     console.log(e.message); 
     throw e; 
    }); 
    })); 

出力されたエラーメッセージから抜粋...

「ダイナミックフォームのではない知られている要素は次のとおりです。 1.ダイナミック」の場合-form 'がAngularコンポーネントである場合、それがこのモジュールの一部であることを確認します。 2. 'dynamic-form'がWebコンポーネントの場合は、このコンポーネントの '@ NgModule.schemas'に「CUSTOM_ELEMENTS_SCHEMA」を追加してこのメ​​ッセージを表示しないようにしてください。 これはドキュメントのどこに覆われていないアメージング

(しかし、私はこのすぐ推測している必要があります!)NOW

と何...

WOW、上記を行った後(固定99%他の役に立たないエラーメッセージが表示されました...

コンポーネントeは、NgModuleの一部ではないか、モジュールがモジュールにインポートされていません。

/node_modules/@angular/compiler/bundles/compiler.umd.jsそうでアドバイスを次

...から来

..

Angular 2 Component is not part of any NgModule

私は、これは通常、犯人を特定compiler.umd.js

// I ADDED THIS LOG STATEMENT 
console.log('compType', String(compType)); 
// THIS LINE EXISTS ALREADY 
throw new Error("Component " + stringify(compType) + " is not part of any NgModule or the module has not been imported into your module."); 

に、このログ文を追加しました。しかし、ここで私は偽の出力を得た...

LOG: '関数E(E) {__cov_m4LFTxiG42jWqZk7He0hiA.f [' 4 '] ++; __ cov_m4LFTxiG42jWqZk7He0hiA.s ['11'] ++;この.router = E、this.formErrors = {invalidCreds:1}; this.router

言及}」

はだからインポートおよび出来上がりルーティングを除去しました!

しかし、この痛みが必要であることは信じられないほどです。

+1

ありがとうございます。私は同じ問題にぶちこみ、それを理解しようとするには時間をかけすぎました。最終的には、あなたが行ったように、 'AppModule'と私の別のルーティングモジュールを削除しなければなりませんでした。 – occasl

関連する問題