@orchestrator/ngx-testing
Version:
Testing utilities for Angular projects
91 lines • 9.59 kB
JavaScript
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==