ng-bullet
Version:
Angular library which drastically improves execution time of your component's unit tests
145 lines (144 loc) • 12.5 kB
JavaScript
var _this = this;
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Type } from "@angular/core";
import { ComponentFixture, getTestBed, TestBed } from "@angular/core/testing";
/**
* Reconfigures current test suit to prevent angular components re-compilation after every test run.
* Forces angular test bed to re-create zone and all injectable services by directly
* setting _instantiated variable to false after every test run.
* Cleanups all the changes and reverts test bed configuration after suite has finished.
*
* @param configureAction an optional delegate which can be used to configure test bed for the current test suite
* directly in the configureTestSuite call (you don't need extra BeforeAll in this case)
*/
export var /** @type {?} */ configureTestSuite = function (configureAction) {
var /** @type {?} */ testBedApi = getTestBed();
var /** @type {?} */ originReset = TestBed.resetTestingModule;
beforeAll(function () {
TestBed.resetTestingModule();
TestBed.resetTestingModule = function () { return TestBed; };
});
if (configureAction) {
beforeAll(function (done) {
return (function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
configureAction();
return [4 /*yield*/, TestBed.compileComponents()];
case 1:
_a.sent();
return [2 /*return*/];
}
});
}); })().then(done).catch(done.fail);
});
}
afterEach(function () {
testBedApi._activeFixtures.forEach(function (fixture) { return fixture.destroy(); });
testBedApi._instantiated = false;
});
afterAll(function () {
TestBed.resetTestingModule = originReset;
TestBed.resetTestingModule();
});
};
/**
* A wrapper class around ComponentFixture, which provides useful accessros:
* component - to access component instance of current the fixture
* element - to access underlying native element of the current component
* detectChanges - to run change detections using current fixture
* resolve - to resolve a type using current fixture's injector
*/
var /**
* A wrapper class around ComponentFixture, which provides useful accessros:
* component - to access component instance of current the fixture
* element - to access underlying native element of the current component
* detectChanges - to run change detections using current fixture
* resolve - to resolve a type using current fixture's injector
*/
TestCtx = /** @class */ (function () {
function TestCtx(fixture) {
this.fixture = fixture;
}
Object.defineProperty(TestCtx.prototype, "component", {
get: /**
* @return {?}
*/
function () { return this.fixture.componentInstance; },
enumerable: true,
configurable: true
});
Object.defineProperty(TestCtx.prototype, "element", {
get: /**
* @return {?}
*/
function () { return this.fixture.debugElement.nativeElement; },
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
TestCtx.prototype.detectChanges = /**
* @return {?}
*/
function () { this.fixture.detectChanges(); };
/**
* @param {?} component
* @return {?}
*/
TestCtx.prototype.resolve = /**
* @param {?} component
* @return {?}
*/
function (component) { return this.fixture.debugElement.injector.get(component); };
return TestCtx;
}());
/**
* A wrapper class around ComponentFixture, which provides useful accessros:
* component - to access component instance of current the fixture
* element - to access underlying native element of the current component
* detectChanges - to run change detections using current fixture
* resolve - to resolve a type using current fixture's injector
*/
export { TestCtx };
function TestCtx_tsickle_Closure_declarations() {
/** @type {?} */
TestCtx.prototype.fixture;
}
/**
* Creates TestCtx instance for the Angular Component which is not initialized yet (no ngOnInit called)
* Use case: you can override Component's providers before hooks are called.
*
* @param component - type of component to create instance of
* *
*/
export var /** @type {?} */ createTestContext = function (component) {
var /** @type {?} */ fixture = TestBed.createComponent(component);
var /** @type {?} */ testCtx = new TestCtx(fixture);
return testCtx;
};
/**
* Same as \@function createTestContext, but waits till fixture becomes stable
*/
export var /** @type {?} */ createStableTestContext = function (component) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
var testCtx;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
testCtx = createTestContext(component);
testCtx.detectChanges();
return [4 /*yield*/, testCtx.fixture.whenStable()];
case 1:
_a.sent();
testCtx.detectChanges();
return [2 /*return*/, testCtx];
}
});
}); };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLWJ1bGxldC8iLCJzb3VyY2VzIjpbInNyYy90ZXN0aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGlCQThFQTs7Ozs7O0FBOUVBLE9BQU8sRUFBRSxJQUFJLEVBQUUsc0JBQXNCO0FBQ3JDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLDhCQUE4Qjs7Ozs7Ozs7OztBQVc5RSxNQUFNLENBQUMscUJBQU0sa0JBQWtCLEdBQUcsVUFBQyxlQUE0QjtJQUMzRCxxQkFBTSxVQUFVLEdBQVEsVUFBVSxFQUFFLENBQUM7SUFDckMscUJBQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztJQUUvQyxTQUFTLENBQUM7UUFDTixPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM3QixPQUFPLENBQUMsa0JBQWtCLEdBQUcsY0FBTSxPQUFBLE9BQU8sRUFBUCxDQUFPLENBQUM7S0FDOUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztRQUNsQixTQUFTLENBQUMsVUFBQyxJQUFZO1lBQUssT0FBQSxDQUFDOzs7OzRCQUN6QixlQUFlLEVBQUUsQ0FBQzs0QkFDbEIscUJBQU0sT0FBTyxDQUFDLGlCQUFpQixFQUFFLEVBQUE7OzRCQUFqQyxTQUFpQyxDQUFDOzs7O2lCQUNyQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7UUFISixDQUdJLENBQUMsQ0FBQztLQUNyQztJQUVELFNBQVMsQ0FBQztRQUNOLFVBQVUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFVBQUMsT0FBOEIsSUFBSyxPQUFBLE9BQU8sQ0FBQyxPQUFPLEVBQUUsRUFBakIsQ0FBaUIsQ0FBQyxDQUFDO1FBQzFGLFVBQVUsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0tBQ3BDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQztRQUNMLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLENBQUM7UUFDekMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7S0FDaEMsQ0FBQyxDQUFDO0NBQ04sQ0FBQzs7Ozs7Ozs7QUFTRjs7Ozs7OztBQUFBO0lBQ0ksaUJBQW1CLE9BQTRCO1FBQTVCLFlBQU8sR0FBUCxPQUFPLENBQXFCO0tBQUs7MEJBRXpDLDhCQUFTOzs7O3NCQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDOzs7OzBCQUVwRCw0QkFBTzs7OztzQkFBa0IsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQzs7Ozs7OztJQUU1RSwrQkFBYTs7O2tCQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7Ozs7O0lBRS9DLHlCQUFPOzs7O2NBQUMsU0FBb0IsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztrQkF2RHBHO0lBd0RDLENBQUE7Ozs7Ozs7O0FBVkQsbUJBVUM7Ozs7Ozs7Ozs7OztBQVFELE1BQU0sQ0FBQyxxQkFBTSxpQkFBaUIsR0FBRyxVQUFJLFNBQWtCO0lBQ25ELHFCQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELHFCQUFNLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBSSxPQUFPLENBQUMsQ0FBQztJQUN4QyxNQUFNLENBQUMsT0FBTyxDQUFDO0NBQ2xCLENBQUM7Ozs7QUFHRixNQUFNLENBQUMscUJBQU0sdUJBQXVCLEdBQUcsVUFBVSxTQUFrQjs7Ozs7Z0JBQ3pELE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDN0MsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN4QixxQkFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFBOztnQkFBbEMsU0FBa0MsQ0FBQztnQkFDbkMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN4QixzQkFBTyxPQUFPLEVBQUM7OztLQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRGaXh0dXJlLCBnZXRUZXN0QmVkLCBUZXN0QmVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcclxuXHJcbi8qKlxyXG4gKiBSZWNvbmZpZ3VyZXMgY3VycmVudCB0ZXN0IHN1aXQgdG8gcHJldmVudCBhbmd1bGFyIGNvbXBvbmVudHMgcmUtY29tcGlsYXRpb24gYWZ0ZXIgZXZlcnkgdGVzdCBydW4uXHJcbiAqIEZvcmNlcyBhbmd1bGFyIHRlc3QgYmVkIHRvIHJlLWNyZWF0ZSB6b25lIGFuZCBhbGwgaW5qZWN0YWJsZSBzZXJ2aWNlcyBieSBkaXJlY3RseVxyXG4gKiBzZXR0aW5nIF9pbnN0YW50aWF0ZWQgdmFyaWFibGUgdG8gZmFsc2UgYWZ0ZXIgZXZlcnkgdGVzdCBydW4uXHJcbiAqIENsZWFudXBzIGFsbCB0aGUgY2hhbmdlcyBhbmQgcmV2ZXJ0cyB0ZXN0IGJlZCBjb25maWd1cmF0aW9uIGFmdGVyIHN1aXRlIGhhcyBmaW5pc2hlZC5cclxuICpcclxuICogQHBhcmFtIGNvbmZpZ3VyZUFjdGlvbiBhbiBvcHRpb25hbCBkZWxlZ2F0ZSB3aGljaCBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdGVzdCBiZWQgZm9yIHRoZSBjdXJyZW50IHRlc3Qgc3VpdGVcclxuICogZGlyZWN0bHkgaW4gdGhlIGNvbmZpZ3VyZVRlc3RTdWl0ZSBjYWxsICh5b3UgZG9uJ3QgbmVlZCBleHRyYSBCZWZvcmVBbGwgaW4gdGhpcyBjYXNlKVxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IGNvbmZpZ3VyZVRlc3RTdWl0ZSA9IChjb25maWd1cmVBY3Rpb24/OiAoKSA9PiB2b2lkKSA9PiB7XHJcbiAgICBjb25zdCB0ZXN0QmVkQXBpOiBhbnkgPSBnZXRUZXN0QmVkKCk7XHJcbiAgICBjb25zdCBvcmlnaW5SZXNldCA9IFRlc3RCZWQucmVzZXRUZXN0aW5nTW9kdWxlO1xyXG5cclxuICAgIGJlZm9yZUFsbCgoKSA9PiB7XHJcbiAgICAgICAgVGVzdEJlZC5yZXNldFRlc3RpbmdNb2R1bGUoKTtcclxuICAgICAgICBUZXN0QmVkLnJlc2V0VGVzdGluZ01vZHVsZSA9ICgpID0+IFRlc3RCZWQ7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoY29uZmlndXJlQWN0aW9uKSB7XHJcbiAgICAgICAgYmVmb3JlQWxsKChkb25lOiBEb25lRm4pID0+IChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbmZpZ3VyZUFjdGlvbigpO1xyXG4gICAgICAgICAgICBhd2FpdCBUZXN0QmVkLmNvbXBpbGVDb21wb25lbnRzKCk7XHJcbiAgICAgICAgfSkoKS50aGVuKGRvbmUpLmNhdGNoKGRvbmUuZmFpbCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGFmdGVyRWFjaCgoKSA9PiB7XHJcbiAgICAgICAgdGVzdEJlZEFwaS5fYWN0aXZlRml4dHVyZXMuZm9yRWFjaCgoZml4dHVyZTogQ29tcG9uZW50Rml4dHVyZTxhbnk+KSA9PiBmaXh0dXJlLmRlc3Ryb3koKSk7XHJcbiAgICAgICAgdGVzdEJlZEFwaS5faW5zdGFudGlhdGVkID0gZmFsc2U7XHJcbiAgICB9KTtcclxuXHJcbiAgICBhZnRlckFsbCgoKSA9PiB7XHJcbiAgICAgICAgVGVzdEJlZC5yZXNldFRlc3RpbmdNb2R1bGUgPSBvcmlnaW5SZXNldDtcclxuICAgICAgICBUZXN0QmVkLnJlc2V0VGVzdGluZ01vZHVsZSgpO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG4vKipcclxuICogQSB3cmFwcGVyIGNsYXNzIGFyb3VuZCBDb21wb25lbnRGaXh0dXJlLCB3aGljaCBwcm92aWRlcyB1c2VmdWwgYWNjZXNzcm9zOlxyXG4gKiBjb21wb25lbnQgLSB0byBhY2Nlc3MgY29tcG9uZW50IGluc3RhbmNlIG9mIGN1cnJlbnQgdGhlIGZpeHR1cmVcclxuICogZWxlbWVudCAtIHRvIGFjY2VzcyB1bmRlcmx5aW5nIG5hdGl2ZSBlbGVtZW50IG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudFxyXG4gKiBkZXRlY3RDaGFuZ2VzIC0gdG8gcnVuIGNoYW5nZSBkZXRlY3Rpb25zIHVzaW5nIGN1cnJlbnQgZml4dHVyZVxyXG4gKiByZXNvbHZlIC0gdG8gcmVzb2x2ZSBhIHR5cGUgdXNpbmcgY3VycmVudCBmaXh0dXJlJ3MgaW5qZWN0b3JcclxuICovXHJcbmV4cG9ydCBjbGFzcyBUZXN0Q3R4PFQ+IHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBmaXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPFQ+KSB7IH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGNvbXBvbmVudCgpIHsgcmV0dXJuIHRoaXMuZml4dHVyZS5jb21wb25lbnRJbnN0YW5jZTsgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZWxlbWVudCgpOiBIVE1MRWxlbWVudCB7IHJldHVybiB0aGlzLmZpeHR1cmUuZGVidWdFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7IH1cclxuXHJcbiAgICBwdWJsaWMgZGV0ZWN0Q2hhbmdlcygpIHsgdGhpcy5maXh0dXJlLmRldGVjdENoYW5nZXMoKTsgfVxyXG5cclxuICAgIHB1YmxpYyByZXNvbHZlKGNvbXBvbmVudDogVHlwZTxhbnk+KSB7IHJldHVybiB0aGlzLmZpeHR1cmUuZGVidWdFbGVtZW50LmluamVjdG9yLmdldChjb21wb25lbnQpOyB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDcmVhdGVzIFRlc3RDdHggaW5zdGFuY2UgZm9yIHRoZSBBbmd1bGFyIENvbXBvbmVudCB3aGljaCBpcyBub3QgaW5pdGlhbGl6ZWQgeWV0IChubyBuZ09uSW5pdCBjYWxsZWQpXHJcbiAqIFVzZSBjYXNlOiB5b3UgY2FuIG92ZXJyaWRlIENvbXBvbmVudCdzIHByb3ZpZGVycyBiZWZvcmUgaG9va3MgYXJlIGNhbGxlZC5cclxuICpcclxuICogQHBhcmFtIGNvbXBvbmVudCAtIHR5cGUgb2YgY29tcG9uZW50IHRvIGNyZWF0ZSBpbnN0YW5jZSBvZlxyXG4gKiAqKi9cclxuZXhwb3J0IGNvbnN0IGNyZWF0ZVRlc3RDb250ZXh0ID0gPFQ+KGNvbXBvbmVudDogVHlwZTxUPikgPT4ge1xyXG4gICAgY29uc3QgZml4dHVyZSA9IFRlc3RCZWQuY3JlYXRlQ29tcG9uZW50PFQ+KGNvbXBvbmVudCk7XHJcbiAgICBjb25zdCB0ZXN0Q3R4ID0gbmV3IFRlc3RDdHg8VD4oZml4dHVyZSk7XHJcbiAgICByZXR1cm4gdGVzdEN0eDtcclxufTtcclxuXHJcbi8qKlNhbWUgYXMgQGZ1bmN0aW9uIGNyZWF0ZVRlc3RDb250ZXh0LCBidXQgd2FpdHMgdGlsbCBmaXh0dXJlIGJlY29tZXMgc3RhYmxlICovXHJcbmV4cG9ydCBjb25zdCBjcmVhdGVTdGFibGVUZXN0Q29udGV4dCA9IGFzeW5jIDxUPihjb21wb25lbnQ6IFR5cGU8VD4pID0+IHtcclxuICAgIGNvbnN0IHRlc3RDdHggPSBjcmVhdGVUZXN0Q29udGV4dChjb21wb25lbnQpO1xyXG4gICAgdGVzdEN0eC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICBhd2FpdCB0ZXN0Q3R4LmZpeHR1cmUud2hlblN0YWJsZSgpO1xyXG4gICAgdGVzdEN0eC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICByZXR1cm4gdGVzdEN0eDtcclxufTtcclxuIl19