@orchestrator/ngx-testing
Version:
Testing utilities for Angular projects
86 lines • 10.6 kB
JavaScript
import { __awaiter } from "tslib";
import { Compiler, } from '@angular/core';
import { TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { HostGeneratorService } from './host-generator.service';
import { TestTypeToken } from './tokens';
export class Host {
constructor(injector) {
this.injector = injector;
this.hostGeneratorService = this.injector.get(HostGeneratorService);
this.componentType = this.injector.get(TestTypeToken);
this.hostComponentType = this.hostGeneratorService.generate();
this.compiler = this.injector.get(Compiler);
this._didCompilation = false;
}
get fixture() {
return this._fixture;
}
get hostElement() {
return this._fixture.debugElement;
}
get hostHtmlElement() {
return this._fixture.nativeElement;
}
get hostComponent() {
return this._fixture.componentInstance;
}
ngOnDestroy() {
if (this._fixture) {
try {
this._fixture.destroy();
}
catch (_a) { }
}
}
compileComponents() {
return __awaiter(this, void 0, void 0, function* () {
if (!this._didCompilation) {
this._didCompilation = true;
const hostModule = this.hostGeneratorService.generateModuleFor(this.hostComponentType);
yield this.compiler.compileModuleAndAllComponentsAsync(hostModule);
return yield TestBed.compileComponents();
}
});
}
createComponent(inputs, detectChanges = false) {
return __awaiter(this, void 0, void 0, function* () {
yield this.compileComponents();
this._fixture = TestBed.createComponent(this.hostComponentType);
if (inputs) {
this.setInputs(inputs);
}
if (detectChanges) {
this.detectChanges();
}
return this._fixture;
});
}
setInputs(inputs, detectChanges = false) {
Object.assign(this.hostComponent, inputs);
if (detectChanges) {
this.detectChanges();
}
}
overrideHostTemplate(tpl) {
TestBed.overrideTemplate(this.hostComponentType, tpl);
}
detectChanges(checkNoChanges) {
this._fixture.detectChanges(checkNoChanges);
}
query(compOrDir) {
return this.hostElement.query(By.directive(compOrDir));
}
queryComponent(compOrDir) {
const elem = this.query(compOrDir);
return elem ? elem.componentInstance : undefined;
}
queryComponentHtml(compOrDir) {
const elem = this.query(compOrDir);
return elem ? elem.nativeElement : undefined;
}
queryCss(css) {
return this.hostElement.query(By.css(css));
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9zdC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BvcmNoZXN0cmF0b3Ivbmd4LXRlc3RpbmcvIiwic291cmNlcyI6WyJsaWIvaG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUNMLFFBQVEsR0FLVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQW9CLE9BQU8sRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBR3pDLE1BQU0sT0FBZ0IsSUFBSTtJQTJCeEIsWUFBc0IsUUFBa0I7UUFBbEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQTFCaEMseUJBQW9CLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUU5RCxrQkFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELHNCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUssQ0FBQztRQWtCN0QsYUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBR3ZDLG9CQUFlLEdBQUcsS0FBSyxDQUFDO0lBRVcsQ0FBQztJQXJCNUMsSUFBSSxPQUFPO1FBQ1QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDO0lBQ3pDLENBQUM7SUFTRCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUN6QjtZQUFDLFdBQU0sR0FBRTtTQUNYO0lBQ0gsQ0FBQztJQUVLLGlCQUFpQjs7WUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO2dCQUU1QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQzVELElBQUksQ0FBQyxpQkFBaUIsQ0FDdkIsQ0FBQztnQkFFRixNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsa0NBQWtDLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBRW5FLE9BQU8sTUFBTSxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzthQUMxQztRQUNILENBQUM7S0FBQTtJQUVLLGVBQWUsQ0FDbkIsTUFBMkIsRUFDM0IsYUFBYSxHQUFHLEtBQUs7O1lBRXJCLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBRWhFLElBQUksTUFBTSxFQUFFO2dCQUNWLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDeEI7WUFFRCxJQUFJLGFBQWEsRUFBRTtnQkFDakIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQ3RCO1lBRUQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLENBQUM7S0FBQTtJQUVELFNBQVMsQ0FBQyxNQUEwQixFQUFFLGFBQWEsR0FBRyxLQUFLO1FBQ3pELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUUxQyxJQUFJLGFBQWEsRUFBRTtZQUNqQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDdEI7SUFDSCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsR0FBVztRQUM5QixPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxhQUFhLENBQUMsY0FBd0I7UUFDcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELEtBQUssQ0FBSSxTQUFrQjtRQUN6QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsY0FBYyxDQUFJLFNBQWtCO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ25ELENBQUM7SUFFRCxrQkFBa0IsQ0FBSSxTQUFrQjtRQUN0QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDL0MsQ0FBQztJQUVELFFBQVEsQ0FBQyxHQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBpbGVyLFxuICBEZWJ1Z0VsZW1lbnQsXG4gIEluamVjdG9yLFxuICBPbkRlc3Ryb3ksXG4gIFR5cGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcG9uZW50Rml4dHVyZSwgVGVzdEJlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvdGVzdGluZyc7XG5pbXBvcnQgeyBCeSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuXG5pbXBvcnQgeyBIb3N0R2VuZXJhdG9yU2VydmljZSB9IGZyb20gJy4vaG9zdC1nZW5lcmF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBUZXN0VHlwZVRva2VuIH0gZnJvbSAnLi90b2tlbnMnO1xuaW1wb3J0IHsgQXNIb3N0Q29tcG9uZW50LCBDb21wb25lbnRJbnB1dHMsIERlYnVnRWxlbWVudFR5cGVkIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBIb3N0PFQgPSBhbnk+IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBob3N0R2VuZXJhdG9yU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEhvc3RHZW5lcmF0b3JTZXJ2aWNlKTtcblxuICByZWFkb25seSBjb21wb25lbnRUeXBlID0gdGhpcy5pbmplY3Rvci5nZXQoVGVzdFR5cGVUb2tlbik7XG4gIHJlYWRvbmx5IGhvc3RDb21wb25lbnRUeXBlID0gdGhpcy5ob3N0R2VuZXJhdG9yU2VydmljZS5nZW5lcmF0ZTxUPigpO1xuXG4gIGdldCBmaXh0dXJlKCk6IENvbXBvbmVudEZpeHR1cmU8QXNIb3N0Q29tcG9uZW50PFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpeHR1cmU7XG4gIH1cblxuICBnZXQgaG9zdEVsZW1lbnQoKTogRGVidWdFbGVtZW50VHlwZWQ8QXNIb3N0Q29tcG9uZW50PFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpeHR1cmUuZGVidWdFbGVtZW50O1xuICB9XG5cbiAgZ2V0IGhvc3RIdG1sRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpeHR1cmUubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIGdldCBob3N0Q29tcG9uZW50KCk6IEFzSG9zdENvbXBvbmVudDxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpeHR1cmUuY29tcG9uZW50SW5zdGFuY2U7XG4gIH1cblxuICBwcml2YXRlIGNvbXBpbGVyID0gdGhpcy5pbmplY3Rvci5nZXQoQ29tcGlsZXIpO1xuXG4gIHByaXZhdGUgX2ZpeHR1cmU6IENvbXBvbmVudEZpeHR1cmU8QXNIb3N0Q29tcG9uZW50PFQ+PjtcbiAgcHJpdmF0ZSBfZGlkQ29tcGlsYXRpb24gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yKSB7fVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9maXh0dXJlKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLl9maXh0dXJlLmRlc3Ryb3koKTtcbiAgICAgIH0gY2F0Y2gge31cbiAgICB9XG4gIH1cblxuICBhc3luYyBjb21waWxlQ29tcG9uZW50cygpIHtcbiAgICBpZiAoIXRoaXMuX2RpZENvbXBpbGF0aW9uKSB7XG4gICAgICB0aGlzLl9kaWRDb21waWxhdGlvbiA9IHRydWU7XG5cbiAgICAgIGNvbnN0IGhvc3RNb2R1bGUgPSB0aGlzLmhvc3RHZW5lcmF0b3JTZXJ2aWNlLmdlbmVyYXRlTW9kdWxlRm9yKFxuICAgICAgICB0aGlzLmhvc3RDb21wb25lbnRUeXBlLFxuICAgICAgKTtcblxuICAgICAgYXdhaXQgdGhpcy5jb21waWxlci5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c0FzeW5jKGhvc3RNb2R1bGUpO1xuXG4gICAgICByZXR1cm4gYXdhaXQgVGVzdEJlZC5jb21waWxlQ29tcG9uZW50cygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUNvbXBvbmVudChcbiAgICBpbnB1dHM/OiBDb21wb25lbnRJbnB1dHM8VD4sXG4gICAgZGV0ZWN0Q2hhbmdlcyA9IGZhbHNlLFxuICApOiBQcm9taXNlPENvbXBvbmVudEZpeHR1cmU8QXNIb3N0Q29tcG9uZW50PFQ+Pj4ge1xuICAgIGF3YWl0IHRoaXMuY29tcGlsZUNvbXBvbmVudHMoKTtcbiAgICB0aGlzLl9maXh0dXJlID0gVGVzdEJlZC5jcmVhdGVDb21wb25lbnQodGhpcy5ob3N0Q29tcG9uZW50VHlwZSk7XG5cbiAgICBpZiAoaW5wdXRzKSB7XG4gICAgICB0aGlzLnNldElucHV0cyhpbnB1dHMpO1xuICAgIH1cblxuICAgIGlmIChkZXRlY3RDaGFuZ2VzKSB7XG4gICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZml4dHVyZTtcbiAgfVxuXG4gIHNldElucHV0cyhpbnB1dHM6IENvbXBvbmVudElucHV0czxUPiwgZGV0ZWN0Q2hhbmdlcyA9IGZhbHNlKSB7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLmhvc3RDb21wb25lbnQsIGlucHV0cyk7XG5cbiAgICBpZiAoZGV0ZWN0Q2hhbmdlcykge1xuICAgICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGVIb3N0VGVtcGxhdGUodHBsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBUZXN0QmVkLm92ZXJyaWRlVGVtcGxhdGUodGhpcy5ob3N0Q29tcG9uZW50VHlwZSwgdHBsKTtcbiAgfVxuXG4gIGRldGVjdENoYW5nZXMoY2hlY2tOb0NoYW5nZXM/OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fZml4dHVyZS5kZXRlY3RDaGFuZ2VzKGNoZWNrTm9DaGFuZ2VzKTtcbiAgfVxuXG4gIHF1ZXJ5PEM+KGNvbXBPckRpcjogVHlwZTxDPik6IERlYnVnRWxlbWVudFR5cGVkPEM+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdEVsZW1lbnQucXVlcnkoQnkuZGlyZWN0aXZlKGNvbXBPckRpcikpO1xuICB9XG5cbiAgcXVlcnlDb21wb25lbnQ8Qz4oY29tcE9yRGlyOiBUeXBlPEM+KTogQyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZWxlbSA9IHRoaXMucXVlcnkoY29tcE9yRGlyKTtcbiAgICByZXR1cm4gZWxlbSA/IGVsZW0uY29tcG9uZW50SW5zdGFuY2UgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBxdWVyeUNvbXBvbmVudEh0bWw8Qz4oY29tcE9yRGlyOiBUeXBlPEM+KTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGVsZW0gPSB0aGlzLnF1ZXJ5KGNvbXBPckRpcik7XG4gICAgcmV0dXJuIGVsZW0gPyBlbGVtLm5hdGl2ZUVsZW1lbnQgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBxdWVyeUNzcyhjc3M6IHN0cmluZyk6IERlYnVnRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmhvc3RFbGVtZW50LnF1ZXJ5KEJ5LmNzcyhjc3MpKTtcbiAgfVxufVxuIl19