Ich habe eine Angular2-Komponente, die eine Registerkarte Steuerelement von @angular/material
enthält.Angular2 Material ViewportRuler Einheit Testfehler
Ich versuche, meine Komponente zu testen (vereinfachte Code unten sehen - ich, dass es keinen Sinn, eine Komponente zu testen, die diese einfach ist), und bin den folgenden Fehler erhalten:
Error: Error in ./MdTabHeader class MdTabHeader - inline template:0:0 caused by: No provider for ViewportRuler!
Error: No provider for ViewportRuler!
Meine Vermutung war zu versuchen, ViewportRuler (https://github.com/angular/material2/blob/master/src/lib/core/overlay/position/viewport-ruler.ts) als Anbieter einzuschließen. Als ich dies (siehe Kommentar gesetzt Linien unten) tun, Karma zurückgibt:
Uncaught SyntaxError: Unexpected token import
at http://localhost:9876/context.html:10
Welche, von ein bisschen googeln, legt nahe, dass sie an den Browser die .ts Datei geliefert wird, anstatt die kompilierte Js. Es ist möglich, dass ich es von der falschen Stelle aus referenziere.
Meine Frage ist: Wie mache ich meine Tests kompilieren?
Mein Code ist:
my.component.ts:
@Component({
selector: 'test',
template: require('./test.component.html')
})
export class TestComponent {
items: any[];
constructor() {
this.items = [{ title: 'test 1', description: 'description 1' }, { title: 'test 2', description: 'description 2' }];
}
}
my.component.html:
<md-tab-group>
<md-tab *ngFor="let link of items">
<template md-tab-label>
<h4>{{link.title}}</h4>
</template>
{{link.description}}
</md-tab>
</md-tab-group>
my.component.spec.ts:
import { TestBed } from '@angular/core/testing';
import { Component} from '@angular/core';
import { MaterialModule } from '@angular/material';
import { ViewportRuler} from '@angular/material/core/overlay/position/viewport-ruler'
import { TestComponent } from './test.component';
describe("TestComponent",
() => {
let fixture, component;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [MaterialModule],
declarations: [TestComponent],
providers: [
//{ provide: ViewportRuler }
]
});
fixture = TestBed.createComponent(TestComponent);
component = fixture.componentInstance;
});
it('true = true',() => {
expect(true).toBe(true);
});
});
Ich habe es versucht um so viele Informationen wie möglich einzubeziehen, aber ich bin neu in der gesamten Angular-Welt, also lass es mich wissen, wenn es noch etwas gibt, was ich anbieten kann.
Vielen Dank.
Haben Sie versucht, 'MaterialModule.forRoot()' in Ihrem Testmodul zu verwenden? – stealththeninja
@stealththeninja, dass es behoben!Schreibe eine Antwort, und ich akzeptiere sie :) – Alex