UNPKG

@ngneat/spectator

Version:

A powerful tool to simplify your Angular tests

63 lines 13.2 kB
import { TestBed, waitForAsync } from '@angular/core/testing'; import { By } from '@angular/platform-browser'; import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing'; import { addMatchers } from '../core'; import { nodeByDirective } from '../internals/node-by-directive'; import * as customMatchers from '../matchers'; import { overrideComponentIfProviderOverridesSpecified, overrideComponents, overrideDirectives, overrideModules, overridePipes, } from '../spectator/create-factory'; import { isType } from '../types'; import { setHostProps } from '../internals/query'; import { initialSpectatorWithHostModule } from './initial-module'; import { getSpectatorHostDefaultOptions } from './options'; import { SpectatorHost } from './spectator-host'; export function createHostFactory(typeOrOptions) { const options = isType(typeOrOptions) ? getSpectatorHostDefaultOptions({ component: typeOrOptions }) : getSpectatorHostDefaultOptions(typeOrOptions); const moduleMetadata = initialSpectatorWithHostModule(options); beforeEach(waitForAsync(() => { addMatchers(customMatchers); TestBed.configureTestingModule(moduleMetadata).overrideModule(BrowserDynamicTestingModule, {}); overrideModules(options); overrideComponents(options); overrideDirectives(options); overridePipes(options); overrideComponentIfProviderOverridesSpecified(options); if (options.template) { TestBed.overrideComponent(options.host, { set: { template: options.template }, }); } })); return (template, overrides) => { const defaults = { hostProps: {}, detectChanges: true, providers: [] }; const { detectChanges, hostProps, providers } = { ...defaults, ...overrides }; if (providers && providers.length) { providers.forEach((provider) => { TestBed.overrideProvider(provider.provide, provider); }); } if (template) { TestBed.overrideComponent(options.host, { set: { template: template }, }); } const spectator = createSpectatorHost(options, hostProps); if (options.detectChanges && detectChanges) { spectator.detectChanges(); } return spectator; }; } function createSpectatorHost(options, hostProps) { const hostFixture = TestBed.createComponent(options.host); const debugElement = hostFixture.debugElement.query(By.directive(options.component)) || hostFixture.debugElement; const debugNode = hostFixture.debugElement.queryAllNodes(nodeByDirective(options.component))[0]; if (!debugNode) { throw new Error(`Cannot find component/directive ${options.component} in host template 😔`); } const hostComponent = setHostProps(hostFixture.componentRef, hostProps); const component = debugNode.injector.get(options.component); return new SpectatorHost(hostComponent, hostFixture.debugElement, hostFixture.nativeElement, hostFixture, debugElement, component, debugElement.nativeElement); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVjdGF0b3Ivc3JjL2xpYi9zcGVjdGF0b3ItaG9zdC9jcmVhdGUtZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUV4RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEtBQUssY0FBYyxNQUFNLGFBQWEsQ0FBQztBQUM5QyxPQUFPLEVBQ0wsNkNBQTZDLEVBQzdDLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLGFBQWEsR0FDZCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHbEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSw4QkFBOEIsRUFBd0IsTUFBTSxXQUFXLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBb0NqRCxNQUFNLFVBQVUsaUJBQWlCLENBQXVCLGFBQW1EO0lBQ3pHLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDbkMsQ0FBQyxDQUFDLDhCQUE4QixDQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxDQUFDO1FBQ3BFLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxh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QUFDO0lBQ3hFLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUU1RCxPQUFPLElBQUksYUFBYSxDQUN0QixhQUFhLEVBQ2IsV0FBVyxDQUFDLFlBQVksRUFDeEIsV0FBVyxDQUFDLGFBQWEsRUFDekIsV0FBVyxFQUNYLFlBQVksRUFDWixTQUFTLEVBQ1QsWUFBWSxDQUFDLGFBQWEsQ0FDM0IsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm92aWRlciwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGVzdEJlZCwgd2FpdEZvckFzeW5jIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcbmltcG9ydCB7IEJ5IH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBCcm93c2VyRHluYW1pY1Rlc3RpbmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyLWR5bmFtaWMvdGVzdGluZyc7XG5cbmltcG9ydCB7IGFkZE1hdGNoZXJzIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBub2RlQnlEaXJlY3RpdmUgfSBmcm9tICcuLi9pbnRlcm5hbHMvbm9kZS1ieS1kaXJlY3RpdmUnO1xuaW1wb3J0ICogYXMgY3VzdG9tTWF0Y2hlcnMgZnJvbSAnLi4vbWF0Y2hlcnMnO1xuaW1wb3J0IHtcbiAgb3ZlcnJpZGVDb21wb25lbnRJZlByb3ZpZGVyT3ZlcnJpZGVzU3BlY2lmaWVkLFxuICBvdmVycmlkZUNvbXBvbmVudHMsXG4gIG92ZXJyaWRlRGlyZWN0aXZlcyxcbiAgb3ZlcnJpZGVNb2R1bGVzLFxuICBvdmVycmlkZVBpcGVzLFxufSBmcm9tICcuLi9zcGVjdGF0b3IvY3JlYXRlLWZhY3RvcnknO1xuaW1wb3J0IHsgaXNUeXBlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBCYXNlU3BlY3RhdG9yT3ZlcnJpZGVzIH0gZnJvbSAnLi4vYmFzZS9vcHRpb25zJztcbmltcG9ydCB7IHNldEhvc3RQcm9wcyB9IGZyb20gJy4uL2ludGVybmFscy9xdWVyeSc7XG5pbXBvcnQgeyBIb3N0Q29tcG9uZW50IH0gZnJvbSAnLi9ob3N0LWNvbXBvbmVudCc7XG5pbXBvcnQgeyBpbml0aWFsU3BlY3RhdG9yV2l0aEhvc3RNb2R1bGUgfSBmcm9tICcuL2luaXRpYWwtbW9kdWxlJztcbmltcG9ydCB7IGdldFNwZWN0YXRvckhvc3REZWZhdWx0T3B0aW9ucywgU3BlY3RhdG9ySG9zdE9wdGlvbnMgfSBmcm9tICcuL29wdGlvbnMnO1xuaW1wb3J0IHsgU3BlY3RhdG9ySG9zdCB9IGZyb20gJy4vc3BlY3RhdG9yLWhvc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNBcGlcbiAqL1xuZXhwb3J0IHR5cGUgU3BlY3RhdG9ySG9zdEZhY3Rvcnk8QywgSD4gPSA8SFA+KFxuICB0ZW1wbGF0ZTogc3RyaW5nLFxuICBvdmVycmlkZXM/OiBTcGVjdGF0b3JIb3N0T3ZlcnJpZGVzPEgsIEhQPixcbikgPT4gU3BlY3RhdG9ySG9zdDxDLCBIICYgKEhvc3RDb21wb25lbnQgZXh0ZW5kcyBIID8gSFAgOiB1bmtub3duKT47XG5cbi8qKlxuICogQHB1YmxpY0FwaVxuICovXG5leHBvcnQgdHlwZSBQcmVzZXRTcGVjdGF0b3JIb3N0RmFjdG9yeTxDLCBIPiA9IDxIUD4oXG4gIHRlbXBsYXRlPzogc3RyaW5nLFxuICBvdmVycmlkZXM/OiBTcGVjdGF0b3JIb3N0T3ZlcnJpZGVzPEgsIEhQPixcbikgPT4gU3BlY3RhdG9ySG9zdDxDLCBIICYgKEhvc3RDb21wb25lbnQgZXh0ZW5kcyBIID8gSFAgOiB1bmtub3duKT47XG5cbi8qKlxuICogQHB1YmxpY0FwaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwZWN0YXRvckhvc3RPdmVycmlkZXM8SCwgSFA+IGV4dGVuZHMgQmFzZVNwZWN0YXRvck92ZXJyaWRlcyB7XG4gIGRldGVjdENoYW5nZXM/OiBib29sZWFuO1xuICBob3N0UHJvcHM/OiBIb3N0Q29tcG9uZW50IGV4dGVuZHMgSCA/IEhQIDogUGFydGlhbDxIPjtcbn1cblxuLyoqXG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVIb3N0RmFjdG9yeTxDLCBIID0gSG9zdENvbXBvbmVudD4oXG4gIG9wdGlvbnM6IFNwZWN0YXRvckhvc3RPcHRpb25zPEMsIEg+ICYgeyB0ZW1wbGF0ZTogc3RyaW5nIH0sXG4pOiBQcmVzZXRTcGVjdGF0b3JIb3N0RmFjdG9yeTxDLCBIPjtcbi8qKlxuICogQHB1YmxpY0FwaVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSG9zdEZhY3Rvcnk8QywgSCA9IEhvc3RDb21wb25lbnQ+KHR5cGVPck9wdGlvbnM6IFR5cGU8Qz4gfCBTcGVjdGF0b3JIb3N0T3B0aW9uczxDLCBIPik6IFNwZWN0YXRvckhvc3RGYWN0b3J5PEMsIEg+O1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUhvc3RGYWN0b3J5PEMsIEggPSBIb3N0Q29tcG9uZW50Pih0eXBlT3JPcHRpb25zOiBUeXBlPEM+IHwgU3BlY3RhdG9ySG9zdE9wdGlvbnM8QywgSD4pOiBTcGVjdGF0b3JIb3N0RmFjdG9yeTxDLCBIPiB7XG4gIGNvbnN0IG9wdGlvbnMgPSBpc1R5cGUodHlwZU9yT3B0aW9ucylcbiAgICA/IGdldFNwZWN0YXRvckhvc3REZWZhdWx0T3B0aW9uczxDLCBIPih7IGNvbXBvbmVudDogdHlwZU9yT3B0aW9ucyB9KVxuICAgIDogZ2V0U3BlY3RhdG9ySG9zdERlZmF1bHRPcHRpb25zKHR5cGVPck9wdGlvbnMpO1xuXG4gIGNvbnN0IG1vZHVsZU1ldGFkYXRhID0gaW5pdGlhbFNwZWN0YXRvcldpdGhIb3N0TW9kdWxlPEMsIEg+KG9wdGlvbnMpO1xuXG4gIGJlZm9yZUVhY2god2FpdEZvckFzeW5jKCgpID0+IHtcbiAgICBhZGRNYXRjaGVycyhjdXN0b21NYXRjaGVycyk7XG4gICAgVGVzdEJlZC5jb25maWd1cmVUZXN0aW5nTW9kdWxlKG1vZHVsZU1ldGFkYXRhKS5vdmVycmlkZU1vZHVsZShCcm93c2VyRHluYW1pY1Rlc3RpbmdNb2R1bGUsIHt9KTtcblxuICAgIG92ZXJyaWRlTW9kdWxlcyhvcHRpb25zKTtcbiAgICBvdmVycmlkZUNvbXBvbmVudHMob3B0aW9ucyk7XG4gICAgb3ZlcnJpZGVEaXJlY3RpdmVzKG9wdGlvbnMpO1xuICAgIG92ZXJyaWRlUGlwZXMob3B0aW9ucyk7XG5cbiAgICBvdmVycmlkZUNvbXBvbmVudElmUHJvdmlkZXJPdmVycmlkZXNTcGVjaWZpZWQob3B0aW9ucyk7XG4gICAgaWYgKG9wdGlvbnMudGVtcGxhdGUpIHtcbiAgICAgIFRlc3RCZWQub3ZlcnJpZGVDb21wb25lbnQob3B0aW9ucy5ob3N0LCB7XG4gICAgICAgIHNldDogeyB0ZW1wbGF0ZTogb3B0aW9ucy50ZW1wbGF0ZSB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9KSk7XG5cbiAgcmV0dXJuIDxIUD4odGVtcGxhdGU/OiBzdHJpbmcsIG92ZXJyaWRlcz86IFNwZWN0YXRvckhvc3RPdmVycmlkZXM8SCwgSFA+KSA9PiB7XG4gICAgY29uc3QgZGVmYXVsdHM6IFNwZWN0YXRvckhvc3RPdmVycmlkZXM8SCwgSFA+ID0geyBob3N0UHJvcHM6IHt9IGFzIGFueSwgZGV0ZWN0Q2hhbmdlczogdHJ1ZSwgcHJvdmlkZXJzOiBbXSB9O1xuICAgIGNvbnN0IHsgZGV0ZWN0Q2hhbmdlcywgaG9zdFByb3BzLCBwcm92aWRlcnMgfSA9IHsgLi4uZGVmYXVsdHMsIC4uLm92ZXJyaWRlcyB9O1xuXG4gICAgaWYgKHByb3ZpZGVycyAmJiBwcm92aWRlcnMubGVuZ3RoKSB7XG4gICAgICBwcm92aWRlcnMuZm9yRWFjaCgocHJvdmlkZXI6IFByb3ZpZGVyKSA9PiB7XG4gICAgICAgIFRlc3RCZWQub3ZlcnJpZGVQcm92aWRlcigocHJvdmlkZXIgYXMgYW55KS5wcm92aWRlLCBwcm92aWRlciBhcyBhbnkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICBUZXN0QmVkLm92ZXJyaWRlQ29tcG9uZW50KG9wdGlvbnMuaG9zdCwge1xuICAgICAgICBzZXQ6IHsgdGVtcGxhdGU6IHRlbXBsYXRlIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGVjdGF0b3IgPSBjcmVhdGVTcGVjdGF0b3JIb3N0KG9wdGlvbnMsIGhvc3RQcm9wcyk7XG5cbiAgICBpZiAob3B0aW9ucy5kZXRlY3RDaGFuZ2VzICYmIGRldGVjdENoYW5nZXMpIHtcbiAgICAgIHNwZWN0YXRvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwZWN0YXRvcjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3BlY3RhdG9ySG9zdDxDLCBILCBIUD4ob3B0aW9uczogUmVxdWlyZWQ8U3BlY3RhdG9ySG9zdE9wdGlvbnM8QywgSD4+LCBob3N0UHJvcHM/OiBIUCk6IFNwZWN0YXRvckhvc3Q8QywgSCAmIEhQPiB7XG4gIGNvbnN0IGhvc3RGaXh0dXJlID0gVGVzdEJlZC5jcmVhdGVDb21wb25lbnQob3B0aW9ucy5ob3N0KTtcbiAgY29uc3QgZGVidWdFbGVtZW50ID0gaG9zdEZpeHR1cmUuZGVidWdFbGVtZW50LnF1ZXJ5KEJ5LmRpcmVjdGl2ZShvcHRpb25zLmNvbXBvbmVudCkpIHx8IGhvc3RGaXh0dXJlLmRlYnVnRWxlbWVudDtcbiAgY29uc3QgZGVidWdOb2RlID0gaG9zdEZpeHR1cmUuZGVidWdFbGVtZW50LnF1ZXJ5QWxsTm9kZXMobm9kZUJ5RGlyZWN0aXZlKG9wdGlvbnMuY29tcG9uZW50KSlbMF07XG5cbiAgaWYgKCFkZWJ1Z05vZGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIGNvbXBvbmVudC9kaXJlY3RpdmUgJHtvcHRpb25zLmNvbXBvbmVudH0gaW4gaG9zdCB0ZW1wbGF0ZSDwn5iUYCk7XG4gIH1cblxuICBjb25zdCBob3N0Q29tcG9uZW50ID0gc2V0SG9zdFByb3BzKGhvc3RGaXh0dXJlLmNvbXBvbmVudFJlZiwgaG9zdFByb3BzKTtcbiAgY29uc3QgY29tcG9uZW50ID0gZGVidWdOb2RlLmluamVjdG9yLmdldChvcHRpb25zLmNvbXBvbmVudCk7XG5cbiAgcmV0dXJuIG5ldyBTcGVjdGF0b3JIb3N0KFxuICAgIGhvc3RDb21wb25lbnQsXG4gICAgaG9zdEZpeHR1cmUuZGVidWdFbGVtZW50LFxuICAgIGhvc3RGaXh0dXJlLm5hdGl2ZUVsZW1lbnQsXG4gICAgaG9zdEZpeHR1cmUsXG4gICAgZGVidWdFbGVtZW50LFxuICAgIGNvbXBvbmVudCxcbiAgICBkZWJ1Z0VsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgKTtcbn1cbiJdfQ==