ngx-testing-tools
Version:
Makes Angular testing easier
53 lines • 7.55 kB
JavaScript
import { Component } from '@angular/core';
import { buildJasmineCallback } from '../common/jasmine/jasmine-callback';
import { mergeRendererFactory } from '../common/test-beds/renderer/merge-renderer-factory';
import { DirectiveTestBedFactory } from './directive-test-bed-factory';
import * as i0 from "@angular/core";
/**
* Creates a new `DirectiveTestBed` to configure the custom test bed and wrap the assertion test.
* @param rootDirective - The described Directive.
* @param hostComponent - The host component on which the directive is tested.
* @param options
*/
export function directiveTestBed(rootDirective, hostComponent, options = {}) {
const factory = new DirectiveTestBedFactory(rootDirective, hostComponent, options);
const defaultStartDetectChanges = factory['startDetectChanges'];
const noTemplate = factory['noTemplate'];
const tb = ((assertion, opts = {}) => {
const { startDetectChanges = defaultStartDetectChanges } = opts;
return buildJasmineCallback({
callback: assertion,
deferredTools: factory['deferredTools'],
preTest: (tools) => {
if (!noTemplate && startDetectChanges)
tools.fixture.detectChanges();
},
postTest: (tools) => {
tools.rx['cleanAll']();
},
});
});
return mergeRendererFactory(factory, tb);
}
/**
* Only invokes the "should create" test.
*
* To be used when there are no noticeable or relevant tests to be performed on this directive.
*
* The usage of this function and `directiveTestBed` function must be mutually exclusive.
*
* @param rootDirective - The described Directive.
* @param options
*/
export function itShouldCreateDirective(rootDirective, options) {
class HostComponent {
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: HostComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.1", type: HostComponent, isStandalone: true, selector: "host-component:not(div)", ngImport: i0, template: '', isInline: true }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: HostComponent, decorators: [{
type: Component,
args: [{ template: '', standalone: true, selector: 'host-component:not(div)' }]
}] });
directiveTestBed(rootDirective, HostComponent, options);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aXZlLXRlc3QtYmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXRlc3RpbmctdG9vbHMvc3JjL2xpYi9kaXJlY3RpdmUtdGVzdC1iZWQvZGlyZWN0aXZlLXRlc3QtYmVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFDaEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDM0YsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBR3ZFOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFPLGFBQXNCLEVBQUUsYUFBc0IsRUFBRSxVQUFtQyxFQUFFO0lBQzFILE1BQU0sT0FBTyxHQUFHLElBQUksdUJBQXVCLENBQUMsYUFBYSxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVuRixNQUFNLHlCQUF5QixHQUFHLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2hFLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUV6QyxNQUFNLEVBQUUsR0FBMkIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUU7UUFDM0QsTUFBTSxFQUFFLGtCQUFrQixHQUFHLHlCQUF5QixFQUFFLEdBQUcsSUFBSSxDQUFDO1FBRWhFLE9BQU8sb0JBQW9CLENBQUM7WUFDMUIsUUFBUSxFQUFFLFNBQVM7WUFDbkIsYUFBYSxFQUFFLE9BQU8sQ0FBQyxlQUFlLENBQUM7WUFDdkMsT0FBTyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxVQUFVLElBQUksa0JBQWtCO29CQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDdkUsQ0FBQztZQUNELFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNsQixLQUFLLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDekIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBMkIsQ0FBQztJQUU3QixPQUFPLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUFJLGFBQXNCLEVBQUUsT0FBd0M7SUFDekcsTUFDTSxhQUFhO2tIQUFiLGFBQWE7c0dBQWIsYUFBYSxtRkFESSxFQUFFOzsrRkFDbkIsYUFBYTtzQkFEbEIsU0FBUzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUseUJBQXlCLEVBQUU7O0lBR2xGLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7Q0FDekQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGJ1aWxkSmFzbWluZUNhbGxiYWNrIH0gZnJvbSAnLi4vY29tbW9uL2phc21pbmUvamFzbWluZS1jYWxsYmFjayc7XG5pbXBvcnQgeyBtZXJnZVJlbmRlcmVyRmFjdG9yeSB9IGZyb20gJy4uL2NvbW1vbi90ZXN0LWJlZHMvcmVuZGVyZXIvbWVyZ2UtcmVuZGVyZXItZmFjdG9yeSc7XG5pbXBvcnQgeyBEaXJlY3RpdmVUZXN0QmVkRmFjdG9yeSB9IGZyb20gJy4vZGlyZWN0aXZlLXRlc3QtYmVkLWZhY3RvcnknO1xuaW1wb3J0IHsgRGlyZWN0aXZlVGVzdEJlZCwgRGlyZWN0aXZlVGVzdEJlZE9wdGlvbnMgfSBmcm9tICcuL21vZGVscyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBgRGlyZWN0aXZlVGVzdEJlZGAgdG8gY29uZmlndXJlIHRoZSBjdXN0b20gdGVzdCBiZWQgYW5kIHdyYXAgdGhlIGFzc2VydGlvbiB0ZXN0LlxuICogQHBhcmFtIHJvb3REaXJlY3RpdmUgLSBUaGUgZGVzY3JpYmVkIERpcmVjdGl2ZS5cbiAqIEBwYXJhbSBob3N0Q29tcG9uZW50IC0gVGhlIGhvc3QgY29tcG9uZW50IG9uIHdoaWNoIHRoZSBkaXJlY3RpdmUgaXMgdGVzdGVkLlxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpcmVjdGl2ZVRlc3RCZWQ8VCwgSD4ocm9vdERpcmVjdGl2ZTogVHlwZTxUPiwgaG9zdENvbXBvbmVudDogVHlwZTxIPiwgb3B0aW9uczogRGlyZWN0aXZlVGVzdEJlZE9wdGlvbnMgPSB7fSk6IERpcmVjdGl2ZVRlc3RCZWQ8VCwgSD4ge1xuICBjb25zdCBmYWN0b3J5ID0gbmV3IERpcmVjdGl2ZVRlc3RCZWRGYWN0b3J5KHJvb3REaXJlY3RpdmUsIGhvc3RDb21wb25lbnQsIG9wdGlvbnMpO1xuXG4gIGNvbnN0IGRlZmF1bHRTdGFydERldGVjdENoYW5nZXMgPSBmYWN0b3J5WydzdGFydERldGVjdENoYW5nZXMnXTtcbiAgY29uc3Qgbm9UZW1wbGF0ZSA9IGZhY3RvcnlbJ25vVGVtcGxhdGUnXTtcblxuICBjb25zdCB0YjogRGlyZWN0aXZlVGVzdEJlZDxULCBIPiA9ICgoYXNzZXJ0aW9uLCBvcHRzID0ge30pID0+IHtcbiAgICBjb25zdCB7IHN0YXJ0RGV0ZWN0Q2hhbmdlcyA9IGRlZmF1bHRTdGFydERldGVjdENoYW5nZXMgfSA9IG9wdHM7XG5cbiAgICByZXR1cm4gYnVpbGRKYXNtaW5lQ2FsbGJhY2soe1xuICAgICAgY2FsbGJhY2s6IGFzc2VydGlvbixcbiAgICAgIGRlZmVycmVkVG9vbHM6IGZhY3RvcnlbJ2RlZmVycmVkVG9vbHMnXSxcbiAgICAgIHByZVRlc3Q6ICh0b29scykgPT4ge1xuICAgICAgICBpZiAoIW5vVGVtcGxhdGUgJiYgc3RhcnREZXRlY3RDaGFuZ2VzKSB0b29scy5maXh0dXJlLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBwb3N0VGVzdDogKHRvb2xzKSA9PiB7XG4gICAgICAgIHRvb2xzLnJ4WydjbGVhbkFsbCddKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9KSBhcyBEaXJlY3RpdmVUZXN0QmVkPFQsIEg+O1xuXG4gIHJldHVybiBtZXJnZVJlbmRlcmVyRmFjdG9yeShmYWN0b3J5LCB0Yik7XG59XG5cbi8qKlxuICogT25seSBpbnZva2VzIHRoZSBcInNob3VsZCBjcmVhdGVcIiB0ZXN0LlxuICpcbiAqIFRvIGJlIHVzZWQgd2hlbiB0aGVyZSBhcmUgbm8gbm90aWNlYWJsZSBvciByZWxldmFudCB0ZXN0cyB0byBiZSBwZXJmb3JtZWQgb24gdGhpcyBkaXJlY3RpdmUuXG4gKlxuICogVGhlIHVzYWdlIG9mIHRoaXMgZnVuY3Rpb24gYW5kIGBkaXJlY3RpdmVUZXN0QmVkYCBmdW5jdGlvbiBtdXN0IGJlIG11dHVhbGx5IGV4Y2x1c2l2ZS5cbiAqXG4gKiBAcGFyYW0gcm9vdERpcmVjdGl2ZSAtIFRoZSBkZXNjcmliZWQgRGlyZWN0aXZlLlxuICogQHBhcmFtIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGl0U2hvdWxkQ3JlYXRlRGlyZWN0aXZlPFQ+KHJvb3REaXJlY3RpdmU6IFR5cGU8VD4sIG9wdGlvbnM/OiBpdFNob3VsZENyZWF0ZURpcmVjdGl2ZU9wdGlvbnMpOiB2b2lkIHtcbiAgQENvbXBvbmVudCh7IHRlbXBsYXRlOiAnJywgc3RhbmRhbG9uZTogdHJ1ZSwgc2VsZWN0b3I6ICdob3N0LWNvbXBvbmVudDpub3QoZGl2KScgfSlcbiAgY2xhc3MgSG9zdENvbXBvbmVudCB7fVxuXG4gIGRpcmVjdGl2ZVRlc3RCZWQocm9vdERpcmVjdGl2ZSwgSG9zdENvbXBvbmVudCwgb3B0aW9ucyk7XG59XG5cbnR5cGUgaXRTaG91bGRDcmVhdGVEaXJlY3RpdmVPcHRpb25zID0gUGljazxEaXJlY3RpdmVUZXN0QmVkT3B0aW9ucyxcbiAgfCAnaW1wb3J0cydcbiAgfCAncHJvdmlkZXJzJ1xuICB8ICdkZWNsYXJhdGlvbnMnXG4gIHwgJ3NjaGVtYXMnXG4+XG4iXX0=