Fehler: Bitte rufen Sie “TestBed.compileComponents" vor dem test
Ich bin immer diese Fehlermeldung:
Fehler: Dieser test Modul verwendet die Komponente MessagesComponent, die mit einem "templateUrl", aber Sie waren nie kompiliert. Bitte rufen Sie "TestBed.compileComponents" vor dem test.
Beim Versuch, führen Sie diesen einfachen test Eckig 2 & Jasmin-Test:
let comp: MessagesComponent;
let fixture: ComponentFixture<MessagesComponent>;
describe('MessagesComponent', () => {
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [ MessagesComponent ],
providers: [ {provide: DataService, useValue: {} } ]
})
.compileComponents(); //compile template and css
fixture = TestBed.createComponent(MessagesComponent);
comp = fixture.componentInstance;
});
it('example', () => {
expect("true").toEqual("true");
});
});
Denke ich, es wäre wegen etwas, was mit meinem webpack test-Konfiguration:
'use strict';
const path = require('path');
const webpack = require('webpack');
module.exports = {
devtool: 'inline-source-map',
module: {
loaders: [
{ loader: 'raw', test: /\.(css|html)$/},
{ exclude: /node_modules/, loader: 'ts', test: /\.ts$/}
]
},
resolve: {
extensions: ['', '.js', '.ts'],
modulesDirectories: ['node_modules'],
root: path.resolve('.', 'src')
},
tslint: {
emitErrors: true
}
};
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vorlage Holen ist asynchron, wenn Ihre Vorlagen sind nicht eingebettet in Ihre Komponenten, so müssen Sie sagen Jasmin, die. Ändern
zu
it()
tut etwas asynchron, wenn er zum Beispiel ruft Daten von einem service. Es ist völlig okay, wenn das diebeforeEach()
werden muss asynchron aber dasit()
nicht....compileComponents().then(() => { ... })
und erstellen Sie Ihre Komponente innerhalb dieser Funktion. Erstellen Sie die Komponente, bevor die Vorlage geladen und kompiliert.Da Sie bereits
webpack
, theoretisch sollten Sie nicht rufen Sie diecompileComponents()
Funktion nach der offiziellen doc hier, weilwebpack
inlines-Vorlagen und css-als Bestandteil des automatisierten build-Prozesses, die vor der Ausführung des Tests.Ein möglicher Grund, dass Ihr template/css nicht inline ist, ist die IDE(
VisualStudio/WebStorm/IntelliJ
) automatisch kompiliert ts zu js und das webpack Lader, welche Zielgruppen fürjs/ts
Dateien sind versuchen zu bekommen, angewendet auf die bereits kompiliert js Dateien anstelle der source-ts-Dateien.