【问题标题】:Angular2 test - not detecting changesAngular2 测试 - 未检测到更改
【发布时间】:2016-03-23 10:19:02
【问题描述】:

我正在尝试检查在切换布尔值时是否显示下拉菜单。 布尔值是组件的输入

@Component({
    selector: 'dropdown',
    directives: [NgClass],
    template: `
        <div [ngClass]="{open: open}">
        </div>
    `,
})

export class DropdownComponent {
    @Input('open') open: boolean = false;
}

还有测试

it('should open', injectAsync([TestComponentBuilder], (tcb: TestComponentBuilder) => {
    return tcb.createAsync(DropdownComponent)
    .then(fixture => {
        let el = fixture.nativeElement;
        let comp: DropdownComponent = fixture.componentInstance;

        expect(el.className).toEqual('');

        comp.open = true;
        fixture.detectChanges();
        expect(el.className).toEqual('open')
    });
}));

我猜当布尔值是 @Input 时必须做一些不同的事情?

【问题讨论】:

    标签: testing jasmine angular


    【解决方案1】:

    您在&lt;div [ngClass]="{open: open}"&gt; 上设置类open,但在DropdownComponent 上进行检查。那不一样。

    这样的事情应该做你想做的事

    var div = fixture.nativeElement.querySelector('div');
    expect(div.className).toEqual('open');
    

    var div = fixture.debugElement.query(By.css('div'));  
    expect(div.className).toEqual('open');
    

    有关示例,另请参阅 How do I trigger a ngModel model update in an Angular 2 unit test?

    【讨论】:

    • 我控制台记录了“el”,它是一个 div。那么从一开始的 nativeElement 是什么?它是组件上方的某个容器吗?
    • 应该是dropdown,你的组件的选择器。元素的子元素应该是div。也许TestComponentBuilder 没有为您的组件创建适当的标签。没有仔细调查。
    猜你喜欢
    • 1970-01-01
    • 2017-10-03
    • 2017-06-27
    • 2015-01-15
    • 1970-01-01
    • 2016-04-20
    • 2016-07-09
    • 2015-07-20
    相关资源
    最近更新 更多