2017-04-26 69 views
1

我们只想在少数组件上测试ChangeDetection值,但我们没有找到轻松访问组件元数据的方法。 对于管我们发现:测试组件元数据

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

这里的主要问题是找到一种简单的方法来做到这一点的组件和检查它是否是OnPush与否。这里有什么想法? 非常感谢。

+0

'进口{} PipeResolver从 '@角/编译器';'? – yurzui

回答

3

好像你正在寻找:

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

全码:

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我非常肯定它取决于口味 – yurzui