2017-11-26 15 views
0

私のようないくつかのリンク、とコンポーネントをテストしようとしている。また、私はすでにthis questionに探してみました角度2ユニットテストrouterLinkクリック

<a routerLink="/contact">Contact</a> 

が、それは解決しませんでした問題。私はその質問(以下コード)によって提案されたソリューションをしようとすると、私はプロバイダを設定するためにトライ場合

、私は、このエラー

beforeEach(async(() => { 
    TestBed.configureTestingModule({ 
     imports: [RouterTestingModule], 
     declarations: [FooterComponent], 
    }).compileComponents(); 
})); 

beforeEach(() => { 
    fixture = TestBed.createComponent(FooterComponent); 
    component = fixture.componentInstance; 
}); 

describe('...',() => { 
    it('should navigate to "/contact" when clicking on link', async(inject([Location], (location: Location) => { 
     fixture.debugElement.query(By.css('.menu')).children[1].nativeElement.click(); 
     fixture.detectChanges(); 
     fixture.whenStable().then(() => { 
      console.log(location.path()); 
     }); 
    }))); 
}); 

No provider for Location!

を得続ける:[場所]私はこのエラーを取得します:

spyOn(router, 'navigate'); 
expect(router.navigate).toHaveBeenCalled(); 
01:

Failed: StaticInjectorError[LocationStrategy]:
StaticInjectorError[LocationStrategy]:
NullInjectorError: No provider for LocationStrategy!

は、私はこのように、ルータをスパイしてみました

しかし、 'Never called'というテストでは失敗します。

どうすればこの問題を解決できますか?

+0

あなたは 'CommonModule'がありません。サイドノートは、想像を絶する最も冗長な定型コードの一部です。 –

+0

@AluanHaddadエラーを解決しましたが、location.path()ログは、予想されるURLではなく空白の '' ''として表示されます。 – celsomtrindade

+0

私はそれについて全く知らない。あなたの設定は疑わしいと思われます。あなたが調べなければならないさまざまな同期および非同期の初期化ロジックがあります。 –

答えて

1

コメントでAluan Haddadが指摘したように、私はimportsCommonModulesがありませんでした。

その後、エラーはなくなりましたが、動作させることができませんでした。なぜなら私がMockModuleを使用していたからです。ここではすべての共通サービス、コンポーネント、モジュールなどをインポートします。RouterTestingModuleを含むテストで使用されました。

RouterTestingModuleを共通MockModuleから削除し、importsに直接移動して問題を解決しました。

// before 
imports: [MockModule], 

// after 
imports: [RouterTestingModule.withRoutes(routing)], 
+0

私は多くの人々がこれが役に立つと思います。あなたはこのように動作する理由についていくつかの光を当てることができますか?それは非常に恣意的なようです。 –

関連する問題