@ngneat/spectator
Version:
A powerful tool to simplify your Angular tests
38 lines • 6.69 kB
JavaScript
import { TestBed } from '@angular/core/testing';
import { isType, doesServiceImplementsOnDestroy } from '../types';
import { initialServiceModule } from './initial-module';
import { getDefaultServiceOptions } from './options';
import { SpectatorService } from './spectator-service';
import { overrideModules } from '../spectator/create-factory';
/**
* @publicApi
*/
export function createServiceFactory(typeOrOptions) {
const service = isType(typeOrOptions) ? typeOrOptions : typeOrOptions.service;
const options = isType(typeOrOptions) ? getDefaultServiceOptions({ service }) : getDefaultServiceOptions(typeOrOptions);
const moduleMetadata = initialServiceModule(options);
beforeEach(() => {
TestBed.configureTestingModule(moduleMetadata);
overrideModules(options);
});
afterEach(() => {
const testedService = TestBed.inject
? TestBed.inject(service)
: TestBed.get(service);
if (doesServiceImplementsOnDestroy(testedService)) {
// eslint-disable-next-line
testedService.ngOnDestroy();
}
});
return (overrides) => {
const defaults = { providers: [] };
const { providers } = { ...defaults, ...overrides };
if (providers && providers.length) {
providers.forEach((provider) => {
TestBed.overrideProvider(provider.provide, provider);
});
}
return new SpectatorService(TestBed.inject ? TestBed.inject(service) : TestBed.get(service));
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWZhY3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVjdGF0b3Ivc3JjL2xpYi9zcGVjdGF0b3Itc2VydmljZS9jcmVhdGUtZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFpQixNQUFNLHVCQUF1QixDQUFDO0FBRy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLHdCQUF3QixFQUEyQixNQUFNLFdBQVcsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFZOUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUksYUFBbUQ7SUFDekYsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7SUFDOUUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBRTNILE1BQU0sY0FBYyxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRXJELFVBQVUsQ0FBQyxHQUFHLEVBQUU7UUFDZCxPQUFPLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDL0MsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQyxDQUFDO0lBRUgsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUNiLE1BQU0sYUFBYSxHQUFTLE9BQVEsQ0FBQyxNQUFNO1lBQ3pDLENBQUMsQ0FBdUUsT0FBUSxDQUFDLE1BQU0sQ0FBSSxPQUFPLENBQUM7WUFDbkcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFekIsSUFBSSw4QkFBOEIsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ2xELDJCQUEyQjtZQUMzQixhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxDQUFDLFNBQXdDLEVBQUUsRUFBRTtRQUNsRCxNQUFNLFFBQVEsR0FBaUMsRUFBRSxTQUFTLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDakUsTUFBTSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsR0FBRyxRQUFRLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQztRQUVwRCxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQWtCLEVBQUUsRUFBRTtnQkFDdkMsT0FBTyxDQUFDLGdCQUFnQixDQUFFLFFBQWdCLENBQUMsT0FBTyxFQUFFLFFBQWUsQ0FBQyxDQUFDO1lBQ3ZFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sSUFBSSxnQkFBZ0IsQ0FBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDbEcsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb3ZpZGVyLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUZXN0QmVkLCBUZXN0QmVkU3RhdGljIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcblxuaW1wb3J0IHsgQmFzZVNwZWN0YXRvck92ZXJyaWRlcyB9IGZyb20gJy4uL2Jhc2Uvb3B0aW9ucyc7XG5pbXBvcnQgeyBpc1R5cGUsIGRvZXNTZXJ2aWNlSW1wbGVtZW50c09uRGVzdHJveSB9IGZyb20gJy4uL3R5cGVzJztcblxuaW1wb3J0IHsgaW5pdGlhbFNlcnZpY2VNb2R1bGUgfSBmcm9tICcuL2luaXRpYWwtbW9kdWxlJztcbmltcG9ydCB7IGdldERlZmF1bHRTZXJ2aWNlT3B0aW9ucywgU3BlY3RhdG9yU2VydmljZU9wdGlvbnMgfSBmcm9tICcuL29wdGlvbnMnO1xuaW1wb3J0IHsgU3BlY3RhdG9yU2VydmljZSB9IGZyb20gJy4vc3BlY3RhdG9yLXNlcnZpY2UnO1xuaW1wb3J0IHsgb3ZlcnJpZGVNb2R1bGVzIH0gZnJvbSAnLi4vc3BlY3RhdG9yL2NyZWF0ZS1mYWN0b3J5JztcblxuLyoqXG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCB0eXBlIFNwZWN0YXRvclNlcnZpY2VGYWN0b3J5PFM+ID0gKG92ZXJyaWRlcz86IFNwZWN0YXRvclNlcnZpY2VPdmVycmlkZXM8Uz4pID0+IFNwZWN0YXRvclNlcnZpY2U8Uz47XG5cbi8qKlxuICogQHB1YmxpY0FwaVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwZWN0YXRvclNlcnZpY2VPdmVycmlkZXM8Uz4gZXh0ZW5kcyBCYXNlU3BlY3RhdG9yT3ZlcnJpZGVzIHt9XG5cbi8qKlxuICogQHB1YmxpY0FwaVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlU2VydmljZUZhY3Rvcnk8Uz4odHlwZU9yT3B0aW9uczogVHlwZTxTPiB8IFNwZWN0YXRvclNlcnZpY2VPcHRpb25zPFM+KTogU3BlY3RhdG9yU2VydmljZUZhY3Rvcnk8Uz4ge1xuICBjb25zdCBzZXJ2aWNlID0gaXNUeXBlKHR5cGVPck9wdGlvbnMpID8gdHlwZU9yT3B0aW9ucyA6IHR5cGVPck9wdGlvbnMuc2VydmljZTtcbiAgY29uc3Qgb3B0aW9ucyA9IGlzVHlwZSh0eXBlT3JPcHRpb25zKSA/IGdldERlZmF1bHRTZXJ2aWNlT3B0aW9uczxTPih7IHNlcnZpY2UgfSkgOiBnZXREZWZhdWx0U2VydmljZU9wdGlvbnModHlwZU9yT3B0aW9ucyk7XG5cbiAgY29uc3QgbW9kdWxlTWV0YWRhdGEgPSBpbml0aWFsU2VydmljZU1vZHVsZShvcHRpb25zKTtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBUZXN0QmVkLmNvbmZpZ3VyZVRlc3RpbmdNb2R1bGUobW9kdWxlTWV0YWRhdGEpO1xuICAgIG92ZXJyaWRlTW9kdWxlcyhvcHRpb25zKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBjb25zdCB0ZXN0ZWRTZXJ2aWNlID0gKDxhbnk+VGVzdEJlZCkuaW5qZWN0XG4gICAgICA/ICg8eyBpbmplY3Q8VD4odG9rZW46IFR5cGU8VD4sIG5vdEZvdW5kVmFsdWU/OiBUKTogVCB9ICYgVGVzdEJlZFN0YXRpYz5UZXN0QmVkKS5pbmplY3Q8Uz4oc2VydmljZSlcbiAgICAgIDogVGVzdEJlZC5nZXQoc2VydmljZSk7XG5cbiAgICBpZiAoZG9lc1NlcnZpY2VJbXBsZW1lbnRzT25EZXN0cm95KHRlc3RlZFNlcnZpY2UpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIHRlc3RlZFNlcnZpY2UubmdPbkRlc3Ryb3koKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiAob3ZlcnJpZGVzPzogU3BlY3RhdG9yU2VydmljZU92ZXJyaWRlczxTPikgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRzOiBTcGVjdGF0b3JTZXJ2aWNlT3ZlcnJpZGVzPFM+ID0geyBwcm92aWRlcnM6IFtdIH07XG4gICAgY29uc3QgeyBwcm92aWRlcnMgfSA9IHsgLi4uZGVmYXVsdHMsIC4uLm92ZXJyaWRlcyB9O1xuXG4gICAgaWYgKHByb3ZpZGVycyAmJiBwcm92aWRlcnMubGVuZ3RoKSB7XG4gICAgICBwcm92aWRlcnMuZm9yRWFjaCgocHJvdmlkZXI6IFByb3ZpZGVyKSA9PiB7XG4gICAgICAgIFRlc3RCZWQub3ZlcnJpZGVQcm92aWRlcigocHJvdmlkZXIgYXMgYW55KS5wcm92aWRlLCBwcm92aWRlciBhcyBhbnkpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBTcGVjdGF0b3JTZXJ2aWNlPFM+KFRlc3RCZWQuaW5qZWN0ID8gVGVzdEJlZC5pbmplY3Qoc2VydmljZSkgOiBUZXN0QmVkLmdldChzZXJ2aWNlKSk7XG4gIH07XG59XG4iXX0=