UNPKG

@orchestrator/ngx-testing

Version:
91 lines 9.59 kB
import { __awaiter, __generator } from "tslib"; import { CompilerFactory, Injector, } from '@angular/core'; import { getTestBed } from '@angular/core/testing'; var compilerFactory; var compiler; afterEach(resetModuleCompiler); /** * Allows to compile and instantiate any {@link NgModule} * with optional custom {@link Injector} or {@link StaticProvider}s * * _NOTE:_ Compiler is reused between test cases unless `options` are passed - * in which case a new compiler will be created and reused for the current test case * * **Example:** * ```ts * import { NgModule } from '@angular/core'; * * @NgModule({...}) * class MyModule {} * * it('should instantiate MyModule', () => { * const myModule = createModule(MuModule); * expect(myModule instanceof MyModule).toBeTruthy(); * }); * ``` * * For async module compilation use {@link createModuleAsync()} */ export function createModule(moduleType, injectorOrProviders, options) { if (injectorOrProviders === void 0) { injectorOrProviders = Injector.NULL; } var moduleDef = createCompiler(options).compileModuleAndAllComponentsSync(moduleType); return instantiateModule(moduleDef.ngModuleFactory, injectorOrProviders); } /** * Allows to compile and instantiate any {@link NgModule} * with optional custom {@link Injector} or {@link StaticProvider}s * in asynchronous manner * * Works same as {@link createModule()} but compiles module asynchronously * @see createModule() */ export function createModuleAsync(moduleType, injectorOrProviders, options) { if (injectorOrProviders === void 0) { injectorOrProviders = Injector.NULL; } return __awaiter(this, void 0, void 0, function () { var moduleDef; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, createCompiler(options).compileModuleAndAllComponentsAsync(moduleType)]; case 1: moduleDef = _a.sent(); return [2 /*return*/, instantiateModule(moduleDef.ngModuleFactory, injectorOrProviders)]; } }); }); } /** * Allows to reset {@link Compiler} used to compile modules for current test case * created via {@link createModule()} and {@link createModuleAsync()} */ export function resetModuleCompiler() { compiler = undefined; } function instantiateModule(moduleFactory, injectorOrProviders) { if (injectorOrProviders === void 0) { injectorOrProviders = Injector.NULL; } if (Array.isArray(injectorOrProviders)) { injectorOrProviders = Injector.create({ providers: injectorOrProviders }); } return moduleFactory.create(injectorOrProviders); } function createCompiler(options) { if (!compiler || options) { compiler = getCompilerFactory().createCompiler(options); } return compiler; } function getCompilerFactory() { if (!compilerFactory) { compilerFactory = getTestBed().platform.injector.get(CompilerFactory); } return compilerFactory; } /** * @internal * * Used to simulate complete reset inside unit tests */ export function _reset() { compilerFactory = undefined; compiler = undefined; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BvcmNoZXN0cmF0b3Ivbmd4LXRlc3RpbmcvIiwic291cmNlcyI6WyJsaWIvY3JlYXRlLW1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUVMLGVBQWUsRUFFZixRQUFRLEdBSVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRW5ELElBQUksZUFBNEMsQ0FBQztBQUNqRCxJQUFJLFFBQThCLENBQUM7QUFFbkMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFFL0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFCRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQzFCLFVBQW1CLEVBQ25CLG1CQUFnRSxFQUNoRSxPQUEyQjtJQUQzQixvQ0FBQSxFQUFBLHNCQUFtRCxRQUFRLENBQUMsSUFBSTtJQUdoRSxJQUFNLFNBQVMsR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsaUNBQWlDLENBQ3pFLFVBQVUsQ0FDWCxDQUFDO0lBQ0YsT0FBTyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLG1CQUFtQixDQUFDLENBQUM7QUFDM0UsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQWdCLGlCQUFpQixDQUNyQyxVQUFtQixFQUNuQixtQkFBZ0UsRUFDaEUsT0FBMkI7SUFEM0Isb0NBQUEsRUFBQSxzQkFBbUQsUUFBUSxDQUFDLElBQUk7Ozs7O3dCQUc5QyxxQkFBTSxjQUFjLENBQ3BDLE9BQU8sQ0FDUixDQUFDLGtDQUFrQyxDQUFDLFVBQVUsQ0FBQyxFQUFBOztvQkFGMUMsU0FBUyxHQUFHLFNBRThCO29CQUNoRCxzQkFBTyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLG1CQUFtQixDQUFDLEVBQUM7Ozs7Q0FDMUU7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLFFBQVEsR0FBRyxTQUFTLENBQUM7QUFDdkIsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQ3hCLGFBQWlDLEVBQ2pDLG1CQUFnRTtJQUFoRSxvQ0FBQSxFQUFBLHNCQUFtRCxRQUFRLENBQUMsSUFBSTtJQUVoRSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsRUFBRTtRQUN0QyxtQkFBbUIsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLENBQUMsQ0FBQztLQUMzRTtJQUVELE9BQU8sYUFBYSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxTQUFTLGNBQWMsQ0FBQyxPQUEyQjtJQUNqRCxJQUFJLENBQUMsUUFBUSxJQUFJLE9BQU8sRUFBRTtRQUN4QixRQUFRLEdBQUcsa0JBQWtCLEVBQUUsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDekQ7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQsU0FBUyxrQkFBa0I7SUFDekIsSUFBSSxDQUFDLGVBQWUsRUFBRTtRQUNwQixlQUFlLEdBQUcsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQ2xELGVBQXNCLENBQ3ZCLENBQUM7S0FDSDtJQUNELE9BQU8sZUFBZSxDQUFDO0FBQ3pCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLE1BQU07SUFDcEIsZUFBZSxHQUFHLFNBQVMsQ0FBQztJQUM1QixRQUFRLEdBQUcsU0FBUyxDQUFDO0FBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21waWxlcixcbiAgQ29tcGlsZXJGYWN0b3J5LFxuICBDb21waWxlck9wdGlvbnMsXG4gIEluamVjdG9yLFxuICBOZ01vZHVsZUZhY3RvcnksXG4gIFN0YXRpY1Byb3ZpZGVyLFxuICBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldFRlc3RCZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3Rlc3RpbmcnO1xuXG5sZXQgY29tcGlsZXJGYWN0b3J5OiBDb21waWxlckZhY3RvcnkgfCB1bmRlZmluZWQ7XG5sZXQgY29tcGlsZXI6IENvbXBpbGVyIHwgdW5kZWZpbmVkO1xuXG5hZnRlckVhY2gocmVzZXRNb2R1bGVDb21waWxlcik7XG5cbi8qKlxuICogQWxsb3dzIHRvIGNvbXBpbGUgYW5kIGluc3RhbnRpYXRlIGFueSB7QGxpbmsgTmdNb2R1bGV9XG4gKiB3aXRoIG9wdGlvbmFsIGN1c3RvbSB7QGxpbmsgSW5qZWN0b3J9IG9yIHtAbGluayBTdGF0aWNQcm92aWRlcn1zXG4gKlxuICogX05PVEU6XyBDb21waWxlciBpcyByZXVzZWQgYmV0d2VlbiB0ZXN0IGNhc2VzIHVubGVzcyBgb3B0aW9uc2AgYXJlIHBhc3NlZCAtXG4gKiBpbiB3aGljaCBjYXNlIGEgbmV3IGNvbXBpbGVyIHdpbGwgYmUgY3JlYXRlZCBhbmQgcmV1c2VkIGZvciB0aGUgY3VycmVudCB0ZXN0IGNhc2VcbiAqXG4gKiAqKkV4YW1wbGU6KipcbiAqIGBgYHRzXG4gKiAgaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbiAqXG4gKiAgQE5nTW9kdWxlKHsuLi59KVxuICogIGNsYXNzIE15TW9kdWxlIHt9XG4gKlxuICogIGl0KCdzaG91bGQgaW5zdGFudGlhdGUgTXlNb2R1bGUnLCAoKSA9PiB7XG4gKiAgICBjb25zdCBteU1vZHVsZSA9IGNyZWF0ZU1vZHVsZShNdU1vZHVsZSk7XG4gKiAgICBleHBlY3QobXlNb2R1bGUgaW5zdGFuY2VvZiBNeU1vZHVsZSkudG9CZVRydXRoeSgpO1xuICogIH0pO1xuICogYGBgXG4gKlxuICogRm9yIGFzeW5jIG1vZHVsZSBjb21waWxhdGlvbiB1c2Uge0BsaW5rIGNyZWF0ZU1vZHVsZUFzeW5jKCl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNb2R1bGU8VD4oXG4gIG1vZHVsZVR5cGU6IFR5cGU8VD4sXG4gIGluamVjdG9yT3JQcm92aWRlcnM6IEluamVjdG9yIHwgU3RhdGljUHJvdmlkZXJbXSA9IEluamVjdG9yLk5VTEwsXG4gIG9wdGlvbnM/OiBDb21waWxlck9wdGlvbnNbXSxcbikge1xuICBjb25zdCBtb2R1bGVEZWYgPSBjcmVhdGVDb21waWxlcihvcHRpb25zKS5jb21waWxlTW9kdWxlQW5kQWxsQ29tcG9uZW50c1N5bmMoXG4gICAgbW9kdWxlVHlwZSxcbiAgKTtcbiAgcmV0dXJuIGluc3RhbnRpYXRlTW9kdWxlKG1vZHVsZURlZi5uZ01vZHVsZUZhY3RvcnksIGluamVjdG9yT3JQcm92aWRlcnMpO1xufVxuXG4vKipcbiAqIEFsbG93cyB0byBjb21waWxlIGFuZCBpbnN0YW50aWF0ZSBhbnkge0BsaW5rIE5nTW9kdWxlfVxuICogd2l0aCBvcHRpb25hbCBjdXN0b20ge0BsaW5rIEluamVjdG9yfSBvciB7QGxpbmsgU3RhdGljUHJvdmlkZXJ9c1xuICogaW4gYXN5bmNocm9ub3VzIG1hbm5lclxuICpcbiAqIFdvcmtzIHNhbWUgYXMge0BsaW5rIGNyZWF0ZU1vZHVsZSgpfSBidXQgY29tcGlsZXMgbW9kdWxlIGFzeW5jaHJvbm91c2x5XG4gKiBAc2VlIGNyZWF0ZU1vZHVsZSgpXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVNb2R1bGVBc3luYzxUPihcbiAgbW9kdWxlVHlwZTogVHlwZTxUPixcbiAgaW5qZWN0b3JPclByb3ZpZGVyczogSW5qZWN0b3IgfCBTdGF0aWNQcm92aWRlcltdID0gSW5qZWN0b3IuTlVMTCxcbiAgb3B0aW9ucz86IENvbXBpbGVyT3B0aW9uc1tdLFxuKSB7XG4gIGNvbnN0IG1vZHVsZURlZiA9IGF3YWl0IGNyZWF0ZUNvbXBpbGVyKFxuICAgIG9wdGlvbnMsXG4gICkuY29tcGlsZU1vZHVsZUFuZEFsbENvbXBvbmVudHNBc3luYyhtb2R1bGVUeXBlKTtcbiAgcmV0dXJuIGluc3RhbnRpYXRlTW9kdWxlKG1vZHVsZURlZi5uZ01vZHVsZUZhY3RvcnksIGluamVjdG9yT3JQcm92aWRlcnMpO1xufVxuXG4vKipcbiAqIEFsbG93cyB0byByZXNldCB7QGxpbmsgQ29tcGlsZXJ9IHVzZWQgdG8gY29tcGlsZSBtb2R1bGVzIGZvciBjdXJyZW50IHRlc3QgY2FzZVxuICogY3JlYXRlZCB2aWEge0BsaW5rIGNyZWF0ZU1vZHVsZSgpfSBhbmQge0BsaW5rIGNyZWF0ZU1vZHVsZUFzeW5jKCl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldE1vZHVsZUNvbXBpbGVyKCkge1xuICBjb21waWxlciA9IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaW5zdGFudGlhdGVNb2R1bGU8VD4oXG4gIG1vZHVsZUZhY3Rvcnk6IE5nTW9kdWxlRmFjdG9yeTxUPixcbiAgaW5qZWN0b3JPclByb3ZpZGVyczogSW5qZWN0b3IgfCBTdGF0aWNQcm92aWRlcltdID0gSW5qZWN0b3IuTlVMTCxcbikge1xuICBpZiAoQXJyYXkuaXNBcnJheShpbmplY3Rvck9yUHJvdmlkZXJzKSkge1xuICAgIGluamVjdG9yT3JQcm92aWRlcnMgPSBJbmplY3Rvci5jcmVhdGUoeyBwcm92aWRlcnM6IGluamVjdG9yT3JQcm92aWRlcnMgfSk7XG4gIH1cblxuICByZXR1cm4gbW9kdWxlRmFjdG9yeS5jcmVhdGUoaW5qZWN0b3JPclByb3ZpZGVycyk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBpbGVyKG9wdGlvbnM/OiBDb21waWxlck9wdGlvbnNbXSkge1xuICBpZiAoIWNvbXBpbGVyIHx8IG9wdGlvbnMpIHtcbiAgICBjb21waWxlciA9IGdldENvbXBpbGVyRmFjdG9yeSgpLmNyZWF0ZUNvbXBpbGVyKG9wdGlvbnMpO1xuICB9XG4gIHJldHVybiBjb21waWxlcjtcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcGlsZXJGYWN0b3J5KCkge1xuICBpZiAoIWNvbXBpbGVyRmFjdG9yeSkge1xuICAgIGNvbXBpbGVyRmFjdG9yeSA9IGdldFRlc3RCZWQoKS5wbGF0Zm9ybS5pbmplY3Rvci5nZXQ8Q29tcGlsZXJGYWN0b3J5PihcbiAgICAgIENvbXBpbGVyRmFjdG9yeSBhcyBhbnksXG4gICAgKTtcbiAgfVxuICByZXR1cm4gY29tcGlsZXJGYWN0b3J5O1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICpcbiAqIFVzZWQgdG8gc2ltdWxhdGUgY29tcGxldGUgcmVzZXQgaW5zaWRlIHVuaXQgdGVzdHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9yZXNldCgpIHtcbiAgY29tcGlsZXJGYWN0b3J5ID0gdW5kZWZpbmVkO1xuICBjb21waWxlciA9IHVuZGVmaW5lZDtcbn1cbiJdfQ==