@ngneat/spectator
Version:
A powerful tool to simplify your Angular tests
57 lines • 10.2 kB
JavaScript
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==