unit-testing - Angular2 单元测试 - 为什么 nativeElement 有空的 CSSStyleDeclaration

标签 unit-testing angular karma-jasmine typescript2.0 angular2-testing

我正在尝试测试一个简单的标题组件,它有一个按钮,并且在获得焦点时 - 仅使用 css 可见性属性打开一个下拉列表。

这是 html:

<nav class="navigation">
    <button type="button">
        <span>click here</span>
    </button>
    <ul>
        <li> Text </li>
        <li> Text </li>
        <li> Text </li>
    </ul>
</nav>

这是scss样式:

button {

    span {
        margin-right: 10px;
    }

    &:focus {

        + ul {
            visibility: visible;
        } 
    }
}

ul {
    position: absolute;
    list-style: none;
    z-index: 1000;
    visibility: hidden;
    transition: visibility 0.1s linear;
    background-color: $color-primary;
}

这是测试:

it('should open dropdown on focus', () => {

    let button = fixture.debugElement.query(By.css('button'));
    button.triggerEventHandler('focus', null);

    fixture.detectChanges();
    let dropdownElement = fixture.debugElement.query(By.css('ul')).nativeElement;

    console.log(dropdownElement);
    console.log(dropdownElement.style);

    expect(dropdownElement.style['visibility']).toBe('visible');

});

当我运行测试时,我可以看到 console.log(dropdownElement) 存在并且 console.log(button.nativeElement) 返回 CSSStyleDeclaration 对象 - 但所有属性都有一个空字符串作为值:

CSSStyleDeclaration {
    alignContent: ""
    alignSelf: ""
    ...
    ...
    ...
    color: ""
    visibility: ""
    ...
    ...
}

所以基本上我需要的是触发按钮上的焦点事件,然后查看下拉菜单的 css/style 属性“可见性”的值是否“可见”。 我不知道出了什么问题,因为我可以看到在 Karma-Debug 中一切都呈现良好,但所有样式属性都是空的...知道问题出在哪里吗?

最佳答案

我在运行时遇到过类似的问题(不是测试)。 样式属性是静态的,基于 html 元素的初始样式属性,因此不会动态更新。 解决方案是使用 Window.getComputedStyle() .此函数从样式表计算(当前!)样式。

关于unit-testing - Angular2 单元测试 - 为什么 nativeElement 有空的 CSSStyleDeclaration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42349088/

相关文章:

visual-studio - VSTS 代码覆盖错误?

java - 模拟方法在 Mockito 中抛出 NullPointerException

ios - 如何在 iOS 9 中对 segue 进行单元测试

javascript - Angular 2 组合表单验证

Angular2 authguards 执行异步函数失败

Angular 4 - 可以在不触发 OnInit 的情况下运行 OnDestroy 吗?

angularjs - karma 测试 : PhantomJS: ReferenceError: Can't find variable: Audio

unit-testing - 在 golang 中模拟外部依赖

angularjs - 为 Karma 测试注入(inject)服务时未定义服务 - AngularJS

angular - 在 Angular Karma Jasmine 测试中模拟服务