私はAngular 2-rc3アプリケーションに取り組んでおり、いくつかの単体テストをセットアップしており、それらは機能しています。なぜ彼らがそうするように書かなければならないのか、私には理解できません。さらに驚くべきことに、私が目にするすべて の 例 は同じアプローチをとっています。具体的には、これらの質問が私のリストの一番上にあります。
TestComponentBuilder
すべての単体テストで構成されているのはなぜですか?it('shows list of blog items by default', inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { return tcb .overrideProviders(BlogRoll, [provide(BlogService, { useValue: mockBlogService })]) .createAsync(BlogRoll) .then((fixture) => { // actual test code }); });
これは、単体テストごとに既に 7 行のコードが追加されており、私のコードの可読性はこれによって大きく損なわれています。これを次の場所に配置しようとしました
beforeEach()
:beforeEach(inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { console.log('beforeEach'); return tcb.overrideProviders(BlogRoll, [provide(BlogService, { useValue: mockBlogService })]) .createAsync(BlogRoll) .then(fixture => { // this never gets printed console.log('in then:', fixture.componentInstance); }); }));
しかし、カルマは非同期性を処理できないようで、すべて
then
が実行されません。これはバグですか、それとも意図したものですか?このコンポーネントの作成を非同期で行う必要があるのはなぜですか? TestComponentBuilder クラス
createSync()
にがありますが、それを使用できませんか? もちろん試してみたところ、関数のシグネチャが異なることがわかりました:と. なぜここでコンポーネント ファクトリが必要なのですか? コンポーネントの async を作成するときに必要でないのはなぜですか? // 更新: RC4 がリリースされ、Type を受け入れるようになりました。偉大な。createAsync(rootComponentType: Type) : Promise<ComponentFixture<any>>
createSync(componentFactory: ComponentFactory<C>) : ComponentFixture<C>
createSync()
私の正気はすでにあなたに感謝します!