2

私はAngular 2-rc3アプリケーションに取り組んでおり、いくつかの単体テストをセットアップしており、それらは機能しています。なぜ彼らがそうするように書かなければならないのか、私には理解できません。さらに驚くべきことに、私が目にするすべて は同じアプローチをとっています。具体的には、これらの質問が私のリストの一番上にあります。

  1. 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が実行されません。これはバグですか、それとも意図したものですか?

  2. このコンポーネントの作成を非同期で行う必要があるのはなぜですか? TestComponentBuilder クラスcreateSync()にがありますが、それを使用できませんか? もちろん試してみたところ、関数のシグネチャが異なることがわかりました:と. なぜここでコンポーネント ファクトリが必要なのですか? コンポーネントの async を作成するときに必要でないのはなぜですか? // 更新: RC4 がリリースされ、Type を受け入れるようになりました。偉大な。createAsync(rootComponentType: Type) : Promise<ComponentFixture<any>>createSync(componentFactory: ComponentFactory<C>) : ComponentFixture<C>createSync()

私の正気はすでにあなたに感謝します!

4

2 に答える 2