在Angular 2中加载外部css并进行测试

use*_*794 5 testing typescript karma-jasmine angular

我正在尝试创建一个带有测试的组件.该组件具有我想要测试的外部CSS.我想我做的一切都是正确的,但我无法通过测试.这是我的代码:app.component.spec.ts

import { AppComponent } from "./app.component";
import { async, TestBed } from "@angular/core/testing";
import { By } from "@angular/platform-browser";

describe("App Component", function () {
    beforeEach(async(() => {
        TestBed.configureTestingModule({
            declarations: [AppComponent],
        }).compileComponents()
    }));
    it("should instantiate component", () => {
        let fixture = TestBed.createComponent(AppComponent);
        expect(fixture.componentInstance instanceof AppComponent).toBe(true);
    });
    it("should have expected <h1> text", () => {
        let fixture = TestBed.createComponent(AppComponent);
        fixture.detectChanges();

        let h1 = fixture.debugElement.query(By.css("h1"));

        expect(h1.nativeElement.innerText).toBe("hello world!");

        expect(h1.nativeElement.style.color).toBe("blue");
    });
});
Run Code Online (Sandbox Code Playgroud)

app.component.ts:

import { Component } from "@angular/core";

@Component({
    moduleId: module.id,
    selector: "nebula-app",
    styleUrls: ["./app.component.css"],
    templateUrl: "./app.component.html",
})
export class AppComponent { }
Run Code Online (Sandbox Code Playgroud)

app.component.html:

<h1>hello world!</h1>
Run Code Online (Sandbox Code Playgroud)

app.component.css:

h1{
    color: blue;
}
Run Code Online (Sandbox Code Playgroud)

只有最后的期望才会失败.它将h1.nativeElement.style.color视为空.好像它没有以某种方式加载CSS.如果我在html中将样式设置为线条样式,则此测试将通过.但是将它作为外部css将会失败.

我究竟做错了什么?我的假设是错误的,compileComponents应该加载外部CSS并将其作为nativeElement的样式?

Kla*_*urn 3

h1.nativeElement.style仅包含在元素上显式设置的样式。例如,以下元素将有一个样式对象,backgroundColor设置为red

<h1 style="background-color: red;">hello world!</h1>
Run Code Online (Sandbox Code Playgroud)

您可以使用量角器 e2e 测试来测试它,而不是使用颜色的单元测试。在那里你可以编写这样的测试:

expect(element(by.css('h1')).getCssValue('color')).toEqual('rgba(0, 0, 255, 1)');
Run Code Online (Sandbox Code Playgroud)

Protractor e2e 测试内置于angular-cli生成的 Angular2 项目中。您可以使用以下命令运行它们ng e2e

  • @user3521794 好问题。我不知道。也许他们是这样看的:应用程序的外观不属于单元测试,而更自然地属于整个应用程序集成测试的一部分,其中所有元素都显示并受所有 css 表(包括全局 CSS 表)影响。这就是为什么他们在 e2e 中创建功能来测试 CSS。 (2认同)