2017-02-09 6 views
-2
のためのランニングテスト

皆さん、Angular2

は私がしようとすると、しかし、私は次のエラーを取得する、(私はこれを一気タスクを使用)Angular2のための私のユニットテストを実行している問題を抱えているとき、テンプレート解析エラーを取得します。 :

Failed: Template parse errors: 
     Can't bind to 'routerLink' since it isn't a known property of 'a'. ("  <ul class="nav navbar-nav navbar-right"> 
       <li routerLinkActive="active"> 
        <a [ERROR ->][routerLink]="['signup']">Sign Up</a> 
        <a [routerLink]="['login']">Login</a> 
       </li>"): [email protected]:13 

routerLinkへの参照をHTMLテンプレートから削除すると、すべて正常に動作します。次は私のwebpack.test.jsファイルの定義です:

var webpack = require('webpack'); 
var helpers = require('./helpers'); 

module.exports = { 
    devtool: 'inline-source-map', 

    resolve: { 
    extensions: ['.ts', '.js'] 
    }, 

    module: { 
    loaders: [ 
     { 
     test: /\.ts$/, 
     loaders: 
      [ 
      'awesome-typescript-loader', 
      'angular2-template-loader' 
      ] 
     }, 
     { 
     test: /\.html$/, 
     loader: 'html-loader' 

     }, 
     { 
     test: /\.scss$/, 
     loaders: [ 'raw-loader', 'sass-loader' ] 
     }, 
    ] 
    }, 
    plugins: [ 
    new webpack.ContextReplacementPlugin(
     // The (\\|\/) piece accounts for path separators in *nix and Windows 
     /angular(\\|\/)core(\\|\/)(esm(\\|\/)src|src)(\\|\/)linker/, 
     helpers.root('./client/src'), // location of your src 
     {} // a map of your routes 
    ) 
    ] 
}; 

これは私が実行しようとしているテストです:

describe("HeaderComponent",() => { 
    let fixture: ComponentFixture<HeaderComponent>; 

    beforeEach(async(() => { 
    TestBed.configureTestingModule({ 
     declarations: [HeaderComponent], 
    }); 
    fixture = TestBed.createComponent(HeaderComponent); 
    fixture.detectChanges(); 
    })); 

    it('should display a form to register',() => { 
    let navbar = fixture.debugElement.query(By.css('navbar')); 
    console.log(navbar); 
    expect(navbar).toBeDefined(); 
    }); 
}); 

誰もが私が欠けているものを任意のアイデアがありますか?私の普通のwebpack.dev.jsは問題なく動作します。これは私のテスト設定に特有のものです。私は何が間違っているのか分かりません。 angular2-template-loaderも削除しようとしましたが、テンプレートを見つけることができないという別のエラーが発生しました。これは少なくとも意味があります。

答えて

0

あなたのテストのセットアップでRouterModuleし、必要なプロバイダを含めていない。

import { RouterModule } from '@angular/router'; 
import { APP_BASE_HREF } from '@angular/common'; 

TestBed.configureTestingModule({ 
    imports: [ 
    RouterModule.forRoot([], {useHash: false}) 
    ], 
    declarations: [ ComponentUnderTest ], 
    providers: [ 
    { provide: APP_BASE_HREF, useValue: '/' } 
    ] 
}) 
+0

私は、テスト自体に私の質問を更新しました。私は絶対に**テストのインポートに追加していません**。私はそれがテンプレートの問題だと思うとあまりにも巻き込まれてしまいました。ああ。 – Ruaghain

+0

Angularを使って単体テストを始めたときにも、この問題が発生しました。私がここに示したように、輸入とプロバイダの両方を含めることを忘れないでください。これであなたの問題が解決したら、upvoteして受け入れてください。 –

+0

'RouterModule'を使ってみましたが、' Routerstを実行する前に少なくとも1つのコンポーネントをブートストラップする '例外がスローされ、' RouterModule'が 'RouterTestingModule'に置き換えられました。チャーム。 @ jesse-carterの輸入に頭を下げてくれてありがとうございました。私はこれを正しい方向に向かわせました。これを解決策としてマークします。 – Ruaghain

0

テストで設定されたルーティングの宣言/プロビジョニングはありますか?それらがなければ、パーサーは指令を理解することができません。