UNPKG

@ngneat/spectator

Version:

A powerful tool to simplify your Angular tests

57 lines 10.2 kB
import { TestBed, waitForAsync } from '@angular/core/testing'; import { BrowserDynamicTestingModule } from '@angular/platform-browser-dynamic/testing'; import { addMatchers } from '../core'; import { setHostProps } from '../internals/query'; import * as customMatchers from '../matchers'; import { isType } from '../types'; import { overrideModules, overridePipes } from '../spectator/create-factory'; import { initialSpectatorPipeModule } from './initial-module'; import { getSpectatorPipeDefaultOptions } from './options'; import { SpectatorPipe } from './spectator-pipe'; /** * @publicApi */ export function createPipeFactory(typeOrOptions) { const options = isType(typeOrOptions) ? getSpectatorPipeDefaultOptions({ pipe: typeOrOptions }) : getSpectatorPipeDefaultOptions(typeOrOptions); const moduleMetadata = initialSpectatorPipeModule(options); beforeEach(waitForAsync(() => { addMatchers(customMatchers); TestBed.configureTestingModule(moduleMetadata); overrideModules(options); overridePipes(options); })); return (templateOrOverrides, overrides) => { const defaults = { hostProps: {}, detectChanges: true, providers: [], }; const resolvedOverrides = typeof templateOrOverrides === 'object' ? templateOrOverrides : overrides; const { detectChanges, hostProps, providers } = { ...defaults, ...resolvedOverrides }; const template = typeof templateOrOverrides === 'string' ? templateOrOverrides : options.template; if (providers && providers.length) { providers.forEach((provider) => { TestBed.overrideProvider(provider.provide, provider); }); } if (template) { TestBed.overrideModule(BrowserDynamicTestingModule, {}).overrideComponent(options.host, { set: { template }, }); } const spectator = createSpectatorPipe(options, hostProps); if (options.detectChanges && detectChanges) { spectator.detectChanges(); } return spectator; }; } function createSpectatorPipe(options, hostProps) { const hostFixture = TestBed.createComponent(options.host); const debugElement = hostFixture.debugElement; const hostComponent = setHostProps(hostFixture.componentRef, hostProps); return new SpectatorPipe(hostComponent, hostFixture, hostFixture.debugElement, debugElement.nativeElement); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVjdGF0b3Ivc3JjL2xpYi9zcGVjdGF0b3ItcGlwZS9jcmVhdGUtZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBR3hGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sS0FBSyxjQUFjLE1BQU0sYUFBYSxDQUFDO0FBRTlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFbEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5RCxPQUFPLEVBQXdCLDhCQUE4QixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQWtCakQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQXVCLGFBQW1EO0lBQ3pHLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDbkMsQ0FBQyxDQUFDLDhCQUE4QixDQUFPLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxDQUFDO1FBQy9ELENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUVsRCxNQUFNLGNBQWMsR0FBRywwQkFBMEIsQ0FBTyxPQUFPLENBQUMsQ0FBQztJQUVqRSxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRTtRQUMzQixXQUFXLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9DLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QixhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVKLE9BQU8sQ0FBSyxtQkFBNEQsRUFBRSxTQUF5QyxFQUFFLEVBQUU7UUFDckgsTUFBTSxRQUFRLEdBQWtDO1lBQzlDLFNBQVMsRUFBRSxFQUFTO1lBQ3BCLGFBQWEsRUFBRSxJQUFJO1lBQ25CLFNBQVMsRUFBRSxFQUFFO1NBQ2QsQ0FBQztRQUNGLE1BQU0saUJBQWlCLEdBQUcsT0FBTyxtQkFBbUIsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDcEcsTUFBTSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLGlCQUFpQixFQUFFLENBQUM7UUFDdEYsTUFBTSxRQUFRLEdBQUcsT0FBTyxtQkFBbUIsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBRWxHLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBa0IsRUFBRSxFQUFFO2dCQUN2QyxPQUFPLENBQUMsZ0JBQWdCLENBQUUsUUFBZ0IsQ0FBQyxPQUFPLEVBQUUsUUFBZSxDQUFDLENBQUM7WUFDdkUsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxjQUFjLENBQUMsMkJBQTJCLEVBQUUsRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtnQkFDdEYsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFO2FBQ2xCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxNQUFNLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFMUQsSUFBSSxPQUFPLENBQUMsYUFBYSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQzNDLFNBQVMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQVcsT0FBNkMsRUFBRSxTQUFjO0lBQ2xHLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFELE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUM7SUFFOUMsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFFeEUsT0FBTyxJQUFJLGFBQWEsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxZQUFZLEVBQUUsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzdHLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm92aWRlciwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGVzdEJlZCwgd2FpdEZvckFzeW5jIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcbmltcG9ydCB7IEJyb3dzZXJEeW5hbWljVGVzdGluZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXItZHluYW1pYy90ZXN0aW5nJztcblxuaW1wb3J0IHsgQmFzZVNwZWN0YXRvck92ZXJyaWRlcyB9IGZyb20gJy4uL2Jhc2Uvb3B0aW9ucyc7XG5pbXBvcnQgeyBhZGRNYXRjaGVycyB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgc2V0SG9zdFByb3BzIH0gZnJvbSAnLi4vaW50ZXJuYWxzL3F1ZXJ5JztcbmltcG9ydCAqIGFzIGN1c3RvbU1hdGNoZXJzIGZyb20gJy4uL21hdGNoZXJzJztcbmltcG9ydCB7IEhvc3RDb21wb25lbnQgfSBmcm9tICcuLi9zcGVjdGF0b3ItaG9zdC9ob3N0LWNvbXBvbmVudCc7XG5pbXBvcnQgeyBpc1R5cGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmltcG9ydCB7IG92ZXJyaWRlTW9kdWxlcywgb3ZlcnJpZGVQaXBlcyB9IGZyb20gJy4uL3NwZWN0YXRvci9jcmVhdGUtZmFjdG9yeSc7XG5pbXBvcnQgeyBpbml0aWFsU3BlY3RhdG9yUGlwZU1vZHVsZSB9IGZyb20gJy4vaW5pdGlhbC1tb2R1bGUnO1xuaW1wb3J0IHsgU3BlY3RhdG9yUGlwZU9wdGlvbnMsIGdldFNwZWN0YXRvclBpcGVEZWZhdWx0T3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucyc7XG5pbXBvcnQgeyBTcGVjdGF0b3JQaXBlIH0gZnJvbSAnLi9zcGVjdGF0b3ItcGlwZSc7XG5cbi8qKlxuICogQHB1YmxpY0FwaVxuICovXG5leHBvcnQgdHlwZSBTcGVjdGF0b3JQaXBlRmFjdG9yeTxQLCBIPiA9IDxIUD4oXG4gIHRlbXBsYXRlT3JPdmVycmlkZXM/OiBzdHJpbmcgfCBTcGVjdGF0b3JQaXBlT3ZlcnJpZGVzPEgsIEhQPixcbiAgb3ZlcnJpZGVzPzogU3BlY3RhdG9yUGlwZU92ZXJyaWRlczxILCBIUD4sXG4pID0+IFNwZWN0YXRvclBpcGU8UCwgSCAmIChIb3N0Q29tcG9uZW50IGV4dGVuZHMgSCA/IEhQIDogdW5rbm93bik+O1xuXG4vKipcbiAqIEBwdWJsaWNBcGlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGVjdGF0b3JQaXBlT3ZlcnJpZGVzPEgsIEhQPiBleHRlbmRzIEJhc2VTcGVjdGF0b3JPdmVycmlkZXMge1xuICBkZXRlY3RDaGFuZ2VzPzogYm9vbGVhbjtcbiAgaG9zdFByb3BzPzogSG9zdENvbXBvbmVudCBleHRlbmRzIEggPyBIUCA6IFBhcnRpYWw8SD47XG59XG5cbi8qKlxuICogQHB1YmxpY0FwaVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGlwZUZhY3Rvcnk8UCwgSCA9IEhvc3RDb21wb25lbnQ+KHR5cGVPck9wdGlvbnM6IFR5cGU8UD4gfCBTcGVjdGF0b3JQaXBlT3B0aW9uczxQLCBIPik6IFNwZWN0YXRvclBpcGVGYWN0b3J5PFAsIEg+IHtcbiAgY29uc3Qgb3B0aW9ucyA9IGlzVHlwZSh0eXBlT3JPcHRpb25zKVxuICAgID8gZ2V0U3BlY3RhdG9yUGlwZURlZmF1bHRPcHRpb25zPFAsIEg+KHsgcGlwZTogdHlwZU9yT3B0aW9ucyB9KVxuICAgIDogZ2V0U3BlY3RhdG9yUGlwZURlZmF1bHRPcHRpb25zKHR5cGVPck9wdGlvbnMpO1xuXG4gIGNvbnN0IG1vZHVsZU1ldGFkYXRhID0gaW5pdGlhbFNwZWN0YXRvclBpcGVNb2R1bGU8UCwgSD4ob3B0aW9ucyk7XG5cbiAgYmVmb3JlRWFjaCh3YWl0Rm9yQXN5bmMoKCkgPT4ge1xuICAgIGFkZE1hdGNoZXJzKGN1c3RvbU1hdGNoZXJzKTtcbiAgICBUZXN0QmVkLmNvbmZpZ3VyZVRlc3RpbmdNb2R1bGUobW9kdWxlTWV0YWRhdGEpO1xuICAgIG92ZXJyaWRlTW9kdWxlcyhvcHRpb25zKTtcbiAgICBvdmVycmlkZVBpcGVzKG9wdGlvbnMpO1xuICB9KSk7XG5cbiAgcmV0dXJuIDxIUD4odGVtcGxhdGVPck92ZXJyaWRlcz86IHN0cmluZyB8IFNwZWN0YXRvclBpcGVPdmVycmlkZXM8SCwgSFA+LCBvdmVycmlkZXM/OiBTcGVjdGF0b3JQaXBlT3ZlcnJpZGVzPEgsIEhQPikgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRzOiBTcGVjdGF0b3JQaXBlT3ZlcnJpZGVzPEgsIEhQPiA9IHtcbiAgICAgIGhvc3RQcm9wczoge30gYXMgYW55LFxuICAgICAgZGV0ZWN0Q2hhbmdlczogdHJ1ZSxcbiAgICAgIHByb3ZpZGVyczogW10sXG4gICAgfTtcbiAgICBjb25zdCByZXNvbHZlZE92ZXJyaWRlcyA9IHR5cGVvZiB0ZW1wbGF0ZU9yT3ZlcnJpZGVzID09PSAnb2JqZWN0JyA/IHRlbXBsYXRlT3JPdmVycmlkZXMgOiBvdmVycmlkZXM7XG4gICAgY29uc3QgeyBkZXRlY3RDaGFuZ2VzLCBob3N0UHJvcHMsIHByb3ZpZGVycyB9ID0geyAuLi5kZWZhdWx0cywgLi4ucmVzb2x2ZWRPdmVycmlkZXMgfTtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHR5cGVvZiB0ZW1wbGF0ZU9yT3ZlcnJpZGVzID09PSAnc3RyaW5nJyA/IHRlbXBsYXRlT3JPdmVycmlkZXMgOiBvcHRpb25zLnRlbXBsYXRlO1xuXG4gICAgaWYgKHByb3ZpZGVycyAmJiBwcm92aWRlcnMubGVuZ3RoKSB7XG4gICAgICBwcm92aWRlcnMuZm9yRWFjaCgocHJvdmlkZXI6IFByb3ZpZGVyKSA9PiB7XG4gICAgICAgIFRlc3RCZWQub3ZlcnJpZGVQcm92aWRlcigocHJvdmlkZXIgYXMgYW55KS5wcm92aWRlLCBwcm92aWRlciBhcyBhbnkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICBUZXN0QmVkLm92ZXJyaWRlTW9kdWxlKEJyb3dzZXJEeW5hbWljVGVzdGluZ01vZHVsZSwge30pLm92ZXJyaWRlQ29tcG9uZW50KG9wdGlvbnMuaG9zdCwge1xuICAgICAgICBzZXQ6IHsgdGVtcGxhdGUgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHNwZWN0YXRvciA9IGNyZWF0ZVNwZWN0YXRvclBpcGUob3B0aW9ucywgaG9zdFByb3BzKTtcblxuICAgIGlmIChvcHRpb25zLmRldGVjdENoYW5nZXMgJiYgZGV0ZWN0Q2hhbmdlcykge1xuICAgICAgc3BlY3RhdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3BlY3RhdG9yO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTcGVjdGF0b3JQaXBlPFAsIEgsIEhQPihvcHRpb25zOiBSZXF1aXJlZDxTcGVjdGF0b3JQaXBlT3B0aW9uczxQLCBIPj4sIGhvc3RQcm9wcz86IEhQKTogU3BlY3RhdG9yUGlwZTxQLCBIICYgSFA+IHtcbiAgY29uc3QgaG9zdEZpeHR1cmUgPSBUZXN0QmVkLmNyZWF0ZUNvbXBvbmVudChvcHRpb25zLmhvc3QpO1xuICBjb25zdCBkZWJ1Z0VsZW1lbnQgPSBob3N0Rml4dHVyZS5kZWJ1Z0VsZW1lbnQ7XG5cbiAgY29uc3QgaG9zdENvbXBvbmVudCA9IHNldEhvc3RQcm9wcyhob3N0Rml4dHVyZS5jb21wb25lbnRSZWYsIGhvc3RQcm9wcyk7XG5cbiAgcmV0dXJuIG5ldyBTcGVjdGF0b3JQaXBlKGhvc3RDb21wb25lbnQsIGhvc3RGaXh0dXJlLCBob3N0Rml4dHVyZS5kZWJ1Z0VsZW1lbnQsIGRlYnVnRWxlbWVudC5uYXRpdmVFbGVtZW50KTtcbn1cbiJdfQ==