Angular2测试"找不到名字'HTMLElement'"

Chr*_*ian 4 jasmine karma-jasmine angular2-testing angular

我正在尝试将测试引入我现有的项目中,但我仍然遇到同样的错误,我认为这会阻止我运行测试.我得到的错误是

错误在.../src/app/dashboard.component.spec.ts(15,13):找不到名称'HTMLElement'.)

Chrome 57.0.2987(Mac OS X 10.12.3):执行4个成功中的4个(7.24秒/ 6.55秒)

我的dashboard.component.spec.ts看起来像这样:

import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { DebugElement } from '@angular/core';

import { DashboardComponent } from './dashboard.component';
import { ExchangeService } from './exchange.service';

describe('DashboardComponent (templateUrl)', () => {

    let comp: DashboardComponent;
    let fixture: ComponentFixture<DashboardComponent>;

    let spy: jasmine.Spy;
    let de: DebugElement;
    let el: HTMLElement; // how does this work...?
    let exchangeService: ExchangeService; // the actual injected service

    const testExchange = 'New York Stock Exchange';

    beforeEach(async(() => {
        TestBed.configureTestingModule({
            declarations: [ DashboardComponent ],
            providers: [ ExchangeService ],
        })
        .compileComponents();
    }))


    beforeEach(() => {

        fixture = TestBed.createComponent(DashboardComponent);
        comp = fixture.componentInstance; // DashboardComponent test componentInstance

        // ClockService actually injected into the component
        exchangeService = fixture.debugElement.injector.get(ExchangeService);

        // Setup spy on the `getExchanges` method
        spy = spyOn(exchangeService, 'getExchanges')
            .and.returnValue(Promise.resolve(testExchange));
        // query for the title <h1> by CSS element selector

        de = fixture.debugElement.query(By.css('.exchange'));
        el = de.nativeElement;
    });

    it('should not show exchange before OnInit', () => {
        expect(el.textContent).toBe('', 'nothing displayed');
        expect(spy.calls.any()).toBe(false, 'getExchanges not yet called');
    });

    it('true is true', () => expect(false).toBe(true));
});
Run Code Online (Sandbox Code Playgroud)

我已四处搜索该错误消息,但我似乎无法在任何地方找到它.此外,最后一次测试应该失败,但我认为它甚至不会因为这个错误而编译.关于什么是错的任何线索?我最初认为这将是一个我失踪的导入,但我看不到其他任何人导入HTMLElements.谢谢!

编辑: 我的tsconfig.json看起来像这样:

{
  "compileOnSave": false,
  "compilerOptions": {
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "lib": [
      "es6",
      "dom",
      "es2015.iterable"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

编辑2: 我实际上不得不按Ctrl + C,并重新启动测试,以便正确编译(我认为它会在更改文件时执行,但它没有).谢谢!

Pie*_*Duc 10

在您tsconfig.json的测试项目中,您应该将dom库添加到lib数组:

"lib": ["es6", "dom", "es2015.iterable"],
Run Code Online (Sandbox Code Playgroud)

  • @Christian试图改变`.spec.json`一个没有伤害:) (3认同)

win*_*mao 6

我也HTMLElement打错了,前.我做到了HtmlElement.希望这可以帮助.

  • 你并不孤单:| (2认同)