UNPKG

ngx-testing-tools

Version:
77 lines 11 kB
import { TestBed } from '@angular/core/testing'; import { assertInstance } from '../../assertions/assert-instance'; import { shouldCreate } from '../../expectations/should-create'; import { buildJasmineCallback } from '../../jasmine/jasmine-callback'; import { appendSet } from '../../utils/set.util'; export class BaseTestBedFactory { constructor(described, options) { this.described = described; this.testBed = TestBed; this._instance = null; this.injectedMap = new Map(); const { imports = [], providers = [], autoCompile = true, checkCreate = true, } = options; this.imports = new Set(imports); this.providers = new Set(providers); if (autoCompile) this._compileEach(); if (checkCreate) this._shouldCreate(); } get instance() { assertInstance(this._instance, this.described); return this._instance; } injectDescribed() { this._instance = this.testBed.inject(this.described); } import(oneOrManyImports) { appendSet(this.imports, oneOrManyImports); return this; } provide(oneOrManyProviders) { appendSet(this.providers, oneOrManyProviders); return this; } /** * Injects an instance by token into the custom test bed. * * Retrieve it into the tools `injected` by autocompletion. * @param name the key to access the instance. * @param token the provider token. */ inject(name, token) { this.injectedMap.set(name, token); return this; } _compileEach() { globalThis.beforeEach(() => this.compile()); } /** * Manually compiles the custom test bed to make enhanced tools available. * * To be used when `autoCompile = false`. * * **To be called inside jasmine `beforeEach` callback.** */ async compile() { this.testBed.configureTestingModule({ imports: [...this.imports.values()], providers: [...this.providers.values()], }); } /** * Sets up extra stuffs using the enhanced tools. * * **Works only for `beforeEach` and `afterEach`**. */ setup(action) { return buildJasmineCallback({ callback: action, deferredTools: this.deferredTools, }); } _shouldCreate() { shouldCreate(() => this.instance); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS10ZXN0LWJlZC1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlc3RpbmctdG9vbHMvc3JjL2xpYi9jb21tb24vdGVzdC1iZWRzL2Jhc2UvYmFzZS10ZXN0LWJlZC1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxPQUFPLEVBQWlCLE1BQU0sdUJBQXVCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQU90RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFJakQsTUFBTSxPQUFnQixrQkFBa0I7SUFNdEMsWUFDWSxTQUE4QixFQUN4QyxPQUEyQjtRQURqQixjQUFTLEdBQVQsU0FBUyxDQUFxQjtRQWlCaEMsWUFBTyxHQUFrQixPQUFPLENBQUM7UUFFbkMsY0FBUyxHQUFrQixJQUFLLENBQUM7UUFTL0IsZ0JBQVcsR0FBb0MsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQXpCakUsTUFBTSxFQUNKLE9BQU8sR0FBRyxFQUFFLEVBQ1osU0FBUyxHQUFHLEVBQUUsRUFDZCxXQUFXLEdBQUcsSUFBSSxFQUNsQixXQUFXLEdBQUcsSUFBSSxHQUNuQixHQUFHLE9BQU8sQ0FBQztRQUVaLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVwQyxJQUFJLFdBQVc7WUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckMsSUFBSSxXQUFXO1lBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFNRCxJQUFjLFFBQVE7UUFDcEIsY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBU1MsZUFBZTtRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBVU0sTUFBTSxDQUFDLGdCQUF5QztRQUNyRCxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQVVNLE9BQU8sQ0FBQyxrQkFBMkM7UUFDeEQsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUM5QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQXdCLElBQXlCLEVBQUUsS0FBdUI7UUFDckYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLFlBQVk7UUFDakIsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksS0FBSyxDQUFDLE9BQU87UUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztZQUNsQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkMsU0FBUyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3hDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLE1BQXNDO1FBQ2pELE9BQU8sb0JBQW9CLENBQUM7WUFDMUIsUUFBUSxFQUFFLE1BQU07WUFDaEIsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1NBQ2xDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTSxhQUFhO1FBQ2xCLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvdmlkZXJUb2tlbiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGVzdEJlZCwgVGVzdEJlZFN0YXRpYyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvdGVzdGluZyc7XG5pbXBvcnQgeyBhc3NlcnRJbnN0YW5jZSB9IGZyb20gJy4uLy4uL2Fzc2VydGlvbnMvYXNzZXJ0LWluc3RhbmNlJztcbmltcG9ydCB7IHNob3VsZENyZWF0ZSB9IGZyb20gJy4uLy4uL2V4cGVjdGF0aW9ucy9zaG91bGQtY3JlYXRlJztcbmltcG9ydCB7IGJ1aWxkSmFzbWluZUNhbGxiYWNrIH0gZnJvbSAnLi4vLi4vamFzbWluZS9qYXNtaW5lLWNhbGxiYWNrJztcbmltcG9ydCB7IEVuaGFuY2VkSmFzbWluZUNhbGxiYWNrIH0gZnJvbSAnLi4vLi4vamFzbWluZS9tb2RlbHMvZW5oYW5jZWQtamFzbWluZS1jYWxsYmFjay5tb2RlbCc7XG5pbXBvcnQgeyBKYXNtaW5lQ2FsbGJhY2sgfSBmcm9tICcuLi8uLi9qYXNtaW5lL21vZGVscy9qYXNtaW5lLWNhbGxiYWNrLm1vZGVsJztcbmltcG9ydCB7IE1heWJlQXJyYXksIE5vbkVtcHR5U3RyaW5nLCBQcmV0dHlNZXJnZSB9IGZyb20gJy4uLy4uL3NoYXJlZC5tb2RlbHMnO1xuaW1wb3J0IHsgQmFzZVRvb2xzIH0gZnJvbSAnLi4vLi4vdG9vbHMvYmFzZS9tb2RlbHMvYmFzZS10b29scy5tb2RlbCc7XG5pbXBvcnQgeyBEZWZlcnJlZFRvb2xzIH0gZnJvbSAnLi4vLi4vdG9vbHMvbW9kZWxzL2RlZmVycmVkLXRvb2xzLm1vZGVsJztcbmltcG9ydCB7IEluamVjdGlvblN0b3JlIH0gZnJvbSAnLi4vLi4vdG9vbHMvc3RvcmUvbW9kZWxzL2luamVjdGVkLXN0b3JlLm1vZGVsJztcbmltcG9ydCB7IGFwcGVuZFNldCB9IGZyb20gJy4uLy4uL3V0aWxzL3NldC51dGlsJztcbmltcG9ydCB7IEFueVByb3ZpZGVyLCBJbXBvcnRhdGlvbiB9IGZyb20gJy4uL21vZGVscy9tZXRhZGF0YS10eXBlLm1vZGVscyc7XG5pbXBvcnQgeyBCYXNlVGVzdEJlZE9wdGlvbnMgfSBmcm9tICcuL21vZGVscy9iYXNlLXRlc3QtYmVkLW9wdGlvbnMubW9kZWwnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVRlc3RCZWRGYWN0b3J5PFxuICBEZXNjcmliZWRUeXBlLFxuICBTdG9yZSBleHRlbmRzIEluamVjdGlvblN0b3JlID0gSW5qZWN0aW9uU3RvcmUsXG4gIFRvb2xzIGV4dGVuZHMgQmFzZVRvb2xzID0gQmFzZVRvb2xzXG4+IHtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGRlc2NyaWJlZDogVHlwZTxEZXNjcmliZWRUeXBlPixcbiAgICBvcHRpb25zOiBCYXNlVGVzdEJlZE9wdGlvbnMsXG4gICkge1xuICAgIGNvbnN0IHtcbiAgICAgIGltcG9ydHMgPSBbXSxcbiAgICAgIHByb3ZpZGVycyA9IFtdLFxuICAgICAgYXV0b0NvbXBpbGUgPSB0cnVlLFxuICAgICAgY2hlY2tDcmVhdGUgPSB0cnVlLFxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgdGhpcy5pbXBvcnRzID0gbmV3IFNldChpbXBvcnRzKTtcbiAgICB0aGlzLnByb3ZpZGVycyA9IG5ldyBTZXQocHJvdmlkZXJzKTtcblxuICAgIGlmIChhdXRvQ29tcGlsZSkgdGhpcy5fY29tcGlsZUVhY2goKTtcbiAgICBpZiAoY2hlY2tDcmVhdGUpIHRoaXMuX3Nob3VsZENyZWF0ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRlc3RCZWQ6IFRlc3RCZWRTdGF0aWMgPSBUZXN0QmVkO1xuXG4gIHByaXZhdGUgX2luc3RhbmNlOiBEZXNjcmliZWRUeXBlID0gbnVsbCE7XG5cbiAgcHJvdGVjdGVkIGdldCBpbnN0YW5jZSgpOiBEZXNjcmliZWRUeXBlIHtcbiAgICBhc3NlcnRJbnN0YW5jZSh0aGlzLl9pbnN0YW5jZSwgdGhpcy5kZXNjcmliZWQpO1xuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBkZWZlcnJlZFRvb2xzOiBEZWZlcnJlZFRvb2xzPFRvb2xzPjtcblxuICBwcm90ZWN0ZWQgaW5qZWN0ZWRNYXA6IE1hcDxzdHJpbmcsIFByb3ZpZGVyVG9rZW48YW55Pj4gPSBuZXcgTWFwKCk7XG5cbiAgcHJvdGVjdGVkIGltcG9ydHM6IFNldDxJbXBvcnRhdGlvbj47XG4gIHByb3RlY3RlZCBwcm92aWRlcnM6IFNldDxBbnlQcm92aWRlcj47XG5cbiAgcHJvdGVjdGVkIGluamVjdERlc2NyaWJlZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9pbnN0YW5jZSA9IHRoaXMudGVzdEJlZC5pbmplY3QodGhpcy5kZXNjcmliZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydHMgb25lIG1vZHVsZSBvciBvbmUgc3RhbmRhbG9uZSBjb21wb25lbnQgLyBkaXJlY3RpdmUgLyBwaXBlIGludG8gdGhlIGN1c3RvbSB0ZXN0IGJlZC5cbiAgICovXG4gIHB1YmxpYyBpbXBvcnQoaW1wb3J0YXRpb246IEltcG9ydGF0aW9uKTogdGhpc1xuICAvKipcbiAgICogSW1wb3J0cyBtYW55IG1vZHVsZXMgb3IgbWFueSBzdGFuZGFsb25lIGNvbXBvbmVudHMgLyBkaXJlY3RpdmVzIC8gcGlwZXMgaW50byB0aGUgY3VzdG9tIHRlc3QgYmVkLlxuICAgKi9cbiAgcHVibGljIGltcG9ydChpbXBvcnRzOiBJbXBvcnRhdGlvbltdKTogdGhpc1xuICBwdWJsaWMgaW1wb3J0KG9uZU9yTWFueUltcG9ydHM6IE1heWJlQXJyYXk8SW1wb3J0YXRpb24+KTogdGhpcyB7XG4gICAgYXBwZW5kU2V0KHRoaXMuaW1wb3J0cywgb25lT3JNYW55SW1wb3J0cyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBvbmUgcHJvdmlkZXIgaW50byB0aGUgY3VzdG9tIHRlc3QgYmVkLlxuICAgKi9cbiAgcHVibGljIHByb3ZpZGUocHJvdmlkZXI6IEFueVByb3ZpZGVyKTogdGhpc1xuICAvKipcbiAgICogQWRkcyBtYW55IHByb3ZpZGVycyBpbnRvIHRoZSBjdXN0b20gdGVzdCBiZWQuXG4gICAqL1xuICBwdWJsaWMgcHJvdmlkZShwcm92aWRlcnM6IEFueVByb3ZpZGVyW10pOiB0aGlzXG4gIHB1YmxpYyBwcm92aWRlKG9uZU9yTWFueVByb3ZpZGVyczogTWF5YmVBcnJheTxBbnlQcm92aWRlcj4pOiB0aGlzIHtcbiAgICBhcHBlbmRTZXQodGhpcy5wcm92aWRlcnMsIG9uZU9yTWFueVByb3ZpZGVycyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogSW5qZWN0cyBhbiBpbnN0YW5jZSBieSB0b2tlbiBpbnRvIHRoZSBjdXN0b20gdGVzdCBiZWQuXG4gICAqXG4gICAqIFJldHJpZXZlIGl0IGludG8gdGhlIHRvb2xzIGBpbmplY3RlZGAgYnkgYXV0b2NvbXBsZXRpb24uXG4gICAqIEBwYXJhbSBuYW1lIHRoZSBrZXkgdG8gYWNjZXNzIHRoZSBpbnN0YW5jZS5cbiAgICogQHBhcmFtIHRva2VuIHRoZSBwcm92aWRlciB0b2tlbi5cbiAgICovXG4gIHB1YmxpYyBpbmplY3Q8a2V5IGV4dGVuZHMgc3RyaW5nLCBUPihuYW1lOiBOb25FbXB0eVN0cmluZzxrZXk+LCB0b2tlbjogUHJvdmlkZXJUb2tlbjxUPik6IEJhc2VUZXN0QmVkRmFjdG9yeTxEZXNjcmliZWRUeXBlLCBJbmplY3Rpb25TdG9yZTxQcmV0dHlNZXJnZTxTdG9yZVsnaW5qZWN0ZWQnXSAmIHsgW2sgaW4ga2V5XTogVCB9Pj4+IHtcbiAgICB0aGlzLmluamVjdGVkTWFwLnNldChuYW1lLCB0b2tlbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgX2NvbXBpbGVFYWNoKCk6IHZvaWQge1xuICAgIGdsb2JhbFRoaXMuYmVmb3JlRWFjaCgoKSA9PiB0aGlzLmNvbXBpbGUoKSk7XG4gIH1cblxuICAvKipcbiAgICogTWFudWFsbHkgY29tcGlsZXMgdGhlIGN1c3RvbSB0ZXN0IGJlZCB0byBtYWtlIGVuaGFuY2VkIHRvb2xzIGF2YWlsYWJsZS5cbiAgICpcbiAgICogVG8gYmUgdXNlZCB3aGVuIGBhdXRvQ29tcGlsZSA9IGZhbHNlYC5cbiAgICpcbiAgICogKipUbyBiZSBjYWxsZWQgaW5zaWRlIGphc21pbmUgYGJlZm9yZUVhY2hgIGNhbGxiYWNrLioqXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgY29tcGlsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnRlc3RCZWQuY29uZmlndXJlVGVzdGluZ01vZHVsZSh7XG4gICAgICBpbXBvcnRzOiBbLi4udGhpcy5pbXBvcnRzLnZhbHVlcygpXSxcbiAgICAgIHByb3ZpZGVyczogWy4uLnRoaXMucHJvdmlkZXJzLnZhbHVlcygpXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGV4dHJhIHN0dWZmcyB1c2luZyB0aGUgZW5oYW5jZWQgdG9vbHMuXG4gICAqXG4gICAqICoqV29ya3Mgb25seSBmb3IgYGJlZm9yZUVhY2hgIGFuZCBgYWZ0ZXJFYWNoYCoqLlxuICAgKi9cbiAgcHVibGljIHNldHVwKGFjdGlvbjogRW5oYW5jZWRKYXNtaW5lQ2FsbGJhY2s8VG9vbHM+KTogSmFzbWluZUNhbGxiYWNrIHtcbiAgICByZXR1cm4gYnVpbGRKYXNtaW5lQ2FsbGJhY2soe1xuICAgICAgY2FsbGJhY2s6IGFjdGlvbixcbiAgICAgIGRlZmVycmVkVG9vbHM6IHRoaXMuZGVmZXJyZWRUb29scyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBfc2hvdWxkQ3JlYXRlKCk6IHZvaWQge1xuICAgIHNob3VsZENyZWF0ZSgoKSA9PiB0aGlzLmluc3RhbmNlKTtcbiAgfVxufVxuIl19