2017-04-26 7 views
1

少数のコンポーネントでChangeDetectionの値をテストしたいだけですが、コンポーネントのメタデータにeaslyアクセスする方法はありません。 パイプのために我々は発見した:ここテストコンポーネントのメタデータ

it('should be marked as pure',() => { 
     expect(new PipeResolver().resolve(TranslatePipe).pure).toEqual(true); 
    }); 

主な問題は、コンポーネントのためにそれを行うための簡単な方法を見つけて、それがOnPushであるかどうかを確認することです。ここにどんなアイデア? ありがとう。

new DirectiveResolver().resolve(TestComponent) as Component).changeDetection 

全コード:

+0

'角度/コンパイラ@' から 'インポート{PipeResolver};'? – yurzui

答えて

3

は、あなたが探しているようだ

import { Component, Pipe, ChangeDetectionStrategy } from '@angular/core'; 
import { PipeResolver, DirectiveResolver } from '@angular/compiler'; 

@Component({ 
    selector: 'app-banner', 
    template: '<h1>{{title}}</h1>', 
    changeDetection: ChangeDetectionStrategy.OnPush 
}) 
export class TestComponent { 
    title = 'Test Tour of Heroes'; 
} 

@Pipe({ 
    name: 'translate', 
    pure: true 
}) 
export class TranslatePipe { 
    transform() { 

    } 
} 


describe('BannerComponent',() => { 
    it('should be marked as pure',() => { 
    expect(new PipeResolver().resolve(TranslatePipe).pure).toEqual(true); 
    }); 

    it('should be marked as onPush',() => { 
    expect((new DirectiveResolver().resolve(TestComponent) as Component).changeDetection).toEqual(ChangeDetectionStrategy.OnPush); 
    }); 
}); 

Plunker Example

+0

興味深いですが、メタデータはテストする必要がありますか? –

+0

DirectiveResolverとPipeResolverは、コンパイラAPIの一部、それは公共のかどうかわからない、私はそれが好みに依存してかなり確信してい –

+0

@Maximus DirectiveResolverは、コンポーネントのためにも使用することができると私は想像していなかったので、 – yurzui

関連する問題