2017-02-25 5 views
1

angular-cliを使用して角2で最初のテストを行う方法を学習しています。angular cli:テスト中にセレクタが不明

新しいコンポーネントMyComponentを作成したら、そのセレクタapp-mycomponentをアプリケーションテンプレートに追加すると、すべてのテストが失敗し、app-mycomponentは不明です。

この問題はテストでのみ発生します。私がアプリを起動すると、すべてうまくいきます。

私の環境:

npm : 3.10.10 
node : 6.9.5 
angular-cli : 1.0.0-beta.32.3 
jasmine-core: 2.5.2 
protractor: 5.1.0 

ではなく、設定ファイルのトンをコピーし、ここでは再現する手順は、次のとおりです

  1. ng new testproj 
    cd testproj 
    
  2. 新しいプロジェクトを作成するコンポーネントを作成します

    ng generate component mycomp 
    
  3. ./src/mycomp/mycomp.component.tsに移動し、そのセレクタを注意(app-mycompする必要があります)

  4. 編集./src/app/component.htmlと次の行を追加します。

    app-mycompは手順3

  5. で見たセレクタである
    <app-mycomp></app-mycomp> 
    

  6. テストを起動します。

    ng test 
    

は、ここでの障害が報告された:

Error: Template parse errors: 
'app-mycomp' is not a known element: 
1. If 'app-mycomp' is an Angular component, then verify that it is part of this module. 
2. If 'app-mycomp' is a Web Component then add "CUSTOM_ELEMENTS_SCHEMA" to the '@NgModule.schemas' of this component to suppress this message. (" 
{{title}}</h1> 
[ERROR ->]<app-mycomp></app-mycomp>"): [email protected]:0 

が、それはバグですか、私は何か間違ったことをしたのでしょうか。私は手動でMyComponentproviderに設定して、AppComponentに同じ問題を設定しようとしました。

+1

は 'のsrc /アプリ/アプリのために' TestBed'を設定するときに '' declaration'としてMyComponent'を追加しました。 component.spec.ts'?それはステップ5でなければなりません。コンポーネントをテンプレートに追加するときには、コンポーネントをテストで使用できるようにする必要があります。 – jonrsharpe

+0

@jonrsharpe:これは私が想像している部分ですが、角型クリスタルは私のためにこれを行うようです。スペックファイルでbeforEachを2回使用します:beforeEach(async())=> { TestBed.configureTestingModule {{ 宣言:[MyComponent] }) .compileComponents(); })); beforeEach(()=> { 固定具= TestBed.createComponent(MyComponentの); 成分= fixture.componentInstance; fixture.detectChanges();} )。 – Giova

+1

MyComponentのテストに似ていますが、AppComponentのテストでエラーが発生したようです。これは、MyComponentを宣言に追加する必要があるテストです。 –

答えて

0

上記のコメントのおかげで、私は何がうまくいかなかったのか理解しました。 AppComponentテストモジュールはMyComponentの使用方法を知らなかった。私はテストがロードされたときに何が起こっているのかまだ分かりませんが、とにかくこのようにテストにすべてのコンポーネント依存関係を手動で指定する必要があります: app.module.spec.tsではbeforeEachメソッドがTestBed.configureTestingModuleを呼び出します。後

beforeEach(() => { 
TestBed.configureTestingModule({ 
    declarations: [ AppComponent ], 
}); 

::前

beforeEach(() => { 
TestBed.configureTestingModule({ 
    declarations: [ 
    AppComponent , 
    MyComponent 
    ], 
});