@ngneat/spectator
Version:
A powerful tool to simplify your Angular tests
52 lines • 8.6 kB
JavaScript
import { ChangeDetectorRef } from '@angular/core';
import { getChildren, setHostProps } from '../internals/query';
import { isString } from '../types';
import { DomSpectator } from '../base/dom-spectator';
/**
* @publicApi
*/
export class SpectatorHost extends DomSpectator {
constructor(hostComponent, hostDebugElement, hostElement, hostFixture, debugElement, componentInstance, element) {
super(hostFixture, debugElement, componentInstance, element);
this.hostComponent = hostComponent;
this.hostDebugElement = hostDebugElement;
this.hostElement = hostElement;
this.hostFixture = hostFixture;
this.debugElement = debugElement;
this.element = element;
}
get component() {
return this.instance;
}
inject(token, fromComponentInjector = false) {
if (fromComponentInjector) {
return this.debugElement.injector.get(token);
}
return super.inject(token);
}
detectComponentChanges() {
if (this.debugElement) {
this.debugElement.injector.get(ChangeDetectorRef).detectChanges();
}
else {
this.detectChanges();
}
}
queryHost(directiveOrSelector, options) {
if ((options || {}).root && isString(directiveOrSelector)) {
return document.querySelector(directiveOrSelector);
}
return getChildren(this.hostDebugElement)(directiveOrSelector, options)[0] || null;
}
queryHostAll(directiveOrSelector, options) {
if ((options || {}).root && isString(directiveOrSelector)) {
return Array.from(document.querySelectorAll(directiveOrSelector));
}
return getChildren(this.hostDebugElement)(directiveOrSelector, options);
}
setHostInput(input, value) {
setHostProps(this.fixture.componentRef, input, value);
this.detectChanges();
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY3RhdG9yLWhvc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVjdGF0b3Ivc3JjL2xpYi9zcGVjdGF0b3ItaG9zdC9zcGVjdGF0b3ItaG9zdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQXNCLE1BQU0sZUFBZSxDQUFDO0FBSXRFLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFL0QsT0FBTyxFQUEyQixRQUFRLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSXJEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGFBQW9DLFNBQVEsWUFBZTtJQUN0RSxZQUNTLGFBQWdCLEVBQ2hCLGdCQUE4QixFQUM5QixXQUFvQixFQUNwQixXQUFrQyxFQUNsQyxZQUEwQixFQUNqQyxpQkFBb0IsRUFDYixPQUFvQjtRQUUzQixLQUFLLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztRQVJ0RCxrQkFBYSxHQUFiLGFBQWEsQ0FBRztRQUNoQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWM7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQVM7UUFDcEIsZ0JBQVcsR0FBWCxXQUFXLENBQXVCO1FBQ2xDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBRTFCLFlBQU8sR0FBUCxPQUFPLENBQWE7SUFHN0IsQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVNLE1BQU0sQ0FBSSxLQUFlLEVBQUUsd0JBQWlDLEtBQUs7UUFDdEUsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBaUIsQ0FBQztRQUMvRCxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFTSxzQkFBc0I7UUFDM0IsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFLTSxTQUFTLENBQUksbUJBQThCLEVBQUUsT0FBeUI7UUFDM0UsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztZQUMxRCxPQUFPLFFBQVEsQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNyRCxDQUFDO1FBRUQsT0FBTyxXQUFXLENBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ3hGLENBQUM7SUFLTSxZQUFZLENBQUksbUJBQThCLEVBQUUsT0FBeUI7UUFDOUUsSUFBSSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztZQUMxRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsT0FBTyxXQUFXLENBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUlNLFlBQVksQ0FBQyxLQUFVLEVBQUUsS0FBVztRQUN6QyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGVidWdFbGVtZW50LCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRGaXh0dXJlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcblxuaW1wb3J0IHsgRE9NU2VsZWN0b3IgfSBmcm9tICcuLi9kb20tc2VsZWN0b3JzJztcbmltcG9ydCB7IGdldENoaWxkcmVuLCBzZXRIb3N0UHJvcHMgfSBmcm9tICcuLi9pbnRlcm5hbHMvcXVlcnknO1xuaW1wb3J0IHsgVG9rZW4gfSBmcm9tICcuLi90b2tlbic7XG5pbXBvcnQgeyBRdWVyeU9wdGlvbnMsIFF1ZXJ5VHlwZSwgaXNTdHJpbmcgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IERvbVNwZWN0YXRvciB9IGZyb20gJy4uL2Jhc2UvZG9tLXNwZWN0YXRvcic7XG5pbXBvcnQgeyBTcHlPYmplY3QgfSBmcm9tICcuLi9tb2NrJztcbmltcG9ydCB7IEhvc3RDb21wb25lbnQgfSBmcm9tICcuL2hvc3QtY29tcG9uZW50JztcblxuLyoqXG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBjbGFzcyBTcGVjdGF0b3JIb3N0PEMsIEggPSBIb3N0Q29tcG9uZW50PiBleHRlbmRzIERvbVNwZWN0YXRvcjxDPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBob3N0Q29tcG9uZW50OiBILFxuICAgIHB1YmxpYyBob3N0RGVidWdFbGVtZW50OiBEZWJ1Z0VsZW1lbnQsXG4gICAgcHVibGljIGhvc3RFbGVtZW50OiBFbGVtZW50LFxuICAgIHB1YmxpYyBob3N0Rml4dHVyZTogQ29tcG9uZW50Rml4dHVyZTxhbnk+LFxuICAgIHB1YmxpYyBkZWJ1Z0VsZW1lbnQ6IERlYnVnRWxlbWVudCxcbiAgICBjb21wb25lbnRJbnN0YW5jZTogQyxcbiAgICBwdWJsaWMgZWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICkge1xuICAgIHN1cGVyKGhvc3RGaXh0dXJlLCBkZWJ1Z0VsZW1lbnQsIGNvbXBvbmVudEluc3RhbmNlLCBlbGVtZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29tcG9uZW50KCk6IEMge1xuICAgIHJldHVybiB0aGlzLmluc3RhbmNlO1xuICB9XG5cbiAgcHVibGljIGluamVjdDxUPih0b2tlbjogVG9rZW48VD4sIGZyb21Db21wb25lbnRJbmplY3RvcjogYm9vbGVhbiA9IGZhbHNlKTogU3B5T2JqZWN0PFQ+IHtcbiAgICBpZiAoZnJvbUNvbXBvbmVudEluamVjdG9yKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWJ1Z0VsZW1lbnQuaW5qZWN0b3IuZ2V0KHRva2VuKSBhcyBTcHlPYmplY3Q8VD47XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmluamVjdCh0b2tlbik7XG4gIH1cblxuICBwdWJsaWMgZGV0ZWN0Q29tcG9uZW50Q2hhbmdlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZWJ1Z0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuZGVidWdFbGVtZW50LmluamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZikuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcXVlcnlIb3N0PFIgZXh0ZW5kcyBFbGVtZW50PihzZWxlY3Rvcjogc3RyaW5nIHwgRE9NU2VsZWN0b3IsIG9wdGlvbnM/OiB7IHJvb3Q6IGJvb2xlYW4gfSk6IFIgfCBudWxsO1xuICBwdWJsaWMgcXVlcnlIb3N0PFI+KGRpcmVjdGl2ZTogVHlwZTxSPik6IFIgfCBudWxsO1xuICBwdWJsaWMgcXVlcnlIb3N0PFI+KGRpcmVjdGl2ZU9yU2VsZWN0b3I6IFR5cGU8YW55PiB8IHN0cmluZywgb3B0aW9uczogeyByZWFkOiBUb2tlbjxSPiB9KTogUiB8IG51bGw7XG4gIHB1YmxpYyBxdWVyeUhvc3Q8Uj4oZGlyZWN0aXZlT3JTZWxlY3RvcjogUXVlcnlUeXBlLCBvcHRpb25zPzogUXVlcnlPcHRpb25zPFI+KTogUiB8IEVsZW1lbnQgfCBudWxsIHtcbiAgICBpZiAoKG9wdGlvbnMgfHwge30pLnJvb3QgJiYgaXNTdHJpbmcoZGlyZWN0aXZlT3JTZWxlY3RvcikpIHtcbiAgICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGRpcmVjdGl2ZU9yU2VsZWN0b3IpO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRDaGlsZHJlbjxSPih0aGlzLmhvc3REZWJ1Z0VsZW1lbnQpKGRpcmVjdGl2ZU9yU2VsZWN0b3IsIG9wdGlvbnMpWzBdIHx8IG51bGw7XG4gIH1cblxuICBwdWJsaWMgcXVlcnlIb3N0QWxsPFIgZXh0ZW5kcyBFbGVtZW50PihzZWxlY3Rvcjogc3RyaW5nIHwgRE9NU2VsZWN0b3IsIG9wdGlvbnM/OiB7IHJvb3Q6IGJvb2xlYW4gfSk6IFJbXTtcbiAgcHVibGljIHF1ZXJ5SG9zdEFsbDxSPihkaXJlY3RpdmU6IFR5cGU8Uj4pOiBSW107XG4gIHB1YmxpYyBxdWVyeUhvc3RBbGw8Uj4oZGlyZWN0aXZlT3JTZWxlY3RvcjogVHlwZTxhbnk+IHwgc3RyaW5nLCBvcHRpb25zOiB7IHJlYWQ6IFRva2VuPFI+IH0pOiBSW107XG4gIHB1YmxpYyBxdWVyeUhvc3RBbGw8Uj4oZGlyZWN0aXZlT3JTZWxlY3RvcjogUXVlcnlUeXBlLCBvcHRpb25zPzogUXVlcnlPcHRpb25zPFI+KTogUltdIHwgRWxlbWVudFtdIHtcbiAgICBpZiAoKG9wdGlvbnMgfHwge30pLnJvb3QgJiYgaXNTdHJpbmcoZGlyZWN0aXZlT3JTZWxlY3RvcikpIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZGlyZWN0aXZlT3JTZWxlY3RvcikpO1xuICAgIH1cblxuICAgIHJldHVybiBnZXRDaGlsZHJlbjxSPih0aGlzLmhvc3REZWJ1Z0VsZW1lbnQpKGRpcmVjdGl2ZU9yU2VsZWN0b3IsIG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIHNldEhvc3RJbnB1dDxLIGV4dGVuZHMga2V5b2YgSD4oaW5wdXQ6IEggZXh0ZW5kcyBIb3N0Q29tcG9uZW50ID8gYW55IDogUGFydGlhbDxIPik6IHZvaWQ7XG4gIHB1YmxpYyBzZXRIb3N0SW5wdXQ8SyBleHRlbmRzIGtleW9mIEg+KGlucHV0OiBIIGV4dGVuZHMgSG9zdENvbXBvbmVudCA/IGFueSA6IEssIGlucHV0VmFsdWU6IEggZXh0ZW5kcyBIb3N0Q29tcG9uZW50ID8gYW55IDogSFtLXSk6IHZvaWQ7XG4gIHB1YmxpYyBzZXRIb3N0SW5wdXQoaW5wdXQ6IGFueSwgdmFsdWU/OiBhbnkpOiB2b2lkIHtcbiAgICBzZXRIb3N0UHJvcHModGhpcy5maXh0dXJlLmNvbXBvbmVudFJlZiwgaW5wdXQsIHZhbHVlKTtcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgfVxufVxuIl19