UNPKG

@ngneat/spectator

Version:

A powerful tool to simplify your Angular tests

106 lines 12.7 kB
import { Spectator } from '../spectator/spectator'; import { isRouterStub } from './router-stub'; /** * @publicApi */ export class SpectatorRouting extends Spectator { constructor(fixture, debugElement, instance, router, activatedRouteStub) { super(fixture, debugElement, instance, debugElement.nativeElement); this.router = router; this.activatedRouteStub = activatedRouteStub; } /** * Simulates a route navigation by updating the Params, QueryParams and Data observable streams. */ triggerNavigation(options) { if (!this.checkStubPresent()) { return; } if (options && options.params) { this.activatedRouteStub.setParams(options.params); } if (options && options.queryParams) { this.activatedRouteStub.setQueryParams(options.queryParams); } if (options && options.data) { this.activatedRouteStub.setAllData(options.data); } if (options && options.fragment) { this.activatedRouteStub.setFragment(options.fragment); } this.triggerNavigationAndUpdate(); } /** * Updates the route params and triggers a route navigation. */ setRouteParam(name, value) { if (this.checkStubPresent()) { this.activatedRouteStub.setParam(name, value); this.triggerNavigationAndUpdate(); } } /** * Updates the route query params and triggers a route navigation. */ setRouteQueryParam(name, value) { if (this.checkStubPresent()) { this.activatedRouteStub.setQueryParam(name, value); this.triggerNavigationAndUpdate(); } } /** * Updates the route data and triggers a route navigation. * The `value` is typed as `any` since the `Route#data` is a record with `any` values. * There's no sense to make it generic until `Route#data` starts supporting generic types. */ setRouteData(name, value) { if (this.checkStubPresent()) { this.activatedRouteStub.setData(name, value); this.triggerNavigationAndUpdate(); } } /** * Updates the route fragment and triggers a route navigation. */ setRouteFragment(fragment) { if (this.checkStubPresent()) { this.activatedRouteStub.setFragment(fragment); this.triggerNavigationAndUpdate(); } } /** * Updates the route url and triggers a route navigation. */ setRouteUrl(url) { if (this.checkStubPresent()) { this.activatedRouteStub.setUrl(url); this.triggerNavigationAndUpdate(); } } /** * Emits a router event */ emitRouterEvent(event) { if (!isRouterStub(this.router)) { // eslint-disable-next-line no-console console.warn('No stub for Router present. Set Spectator option "stubsEnabled" to true if you want to use this ' + 'helper, or use Router navigation to trigger events.'); return; } this.router.emitRouterEvent(event); } triggerNavigationAndUpdate() { this.activatedRouteStub.triggerNavigation(); this.detectChanges(); } checkStubPresent() { if (!this.activatedRouteStub) { // eslint-disable-next-line no-console console.warn('No stub for ActivatedRoute present. Set Spectator option "stubsEnabled" to true if you want to use this ' + 'helper, or use Router to trigger navigation.'); return false; } return true; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlY3RhdG9yLXJvdXRpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVjdGF0b3Ivc3JjL2xpYi9zcGVjdGF0b3Itcm91dGluZy9zcGVjdGF0b3Itcm91dGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFJbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3Qzs7R0FFRztBQUNILE1BQU0sT0FBTyxnQkFBb0IsU0FBUSxTQUFZO0lBQ25ELFlBQ0UsT0FBOEIsRUFDOUIsWUFBMEIsRUFDMUIsUUFBVyxFQUNLLE1BQWMsRUFDZCxrQkFBdUM7UUFFdkQsS0FBSyxDQUFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUhuRCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFxQjtJQUd6RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxpQkFBaUIsQ0FBQyxPQUFzQjtRQUM3QyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztZQUM3QixPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDNUIsSUFB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cnQgeyBDb21wb25lbnRGaXh0dXJlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcbmltcG9ydCB7IEV2ZW50LCBSb3V0ZXIsIFVybFNlZ21lbnQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQgeyBTcGVjdGF0b3IgfSBmcm9tICcuLi9zcGVjdGF0b3Ivc3BlY3RhdG9yJztcblxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTdHViIH0gZnJvbSAnLi9hY3RpdmF0ZWQtcm91dGUtc3R1Yic7XG5pbXBvcnQgeyBSb3V0ZU9wdGlvbnMgfSBmcm9tICcuL3JvdXRlLW9wdGlvbnMnO1xuaW1wb3J0IHsgaXNSb3V0ZXJTdHViIH0gZnJvbSAnLi9yb3V0ZXItc3R1Yic7XG5cbi8qKlxuICogQHB1YmxpY0FwaVxuICovXG5leHBvcnQgY2xhc3MgU3BlY3RhdG9yUm91dGluZzxDPiBleHRlbmRzIFNwZWN0YXRvcjxDPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGZpeHR1cmU6IENvbXBvbmVudEZpeHR1cmU8YW55PixcbiAgICBkZWJ1Z0VsZW1lbnQ6IERlYnVnRWxlbWVudCxcbiAgICBpbnN0YW5jZTogQyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHVibGljIHJlYWRvbmx5IGFjdGl2YXRlZFJvdXRlU3R1Yj86IEFjdGl2YXRlZFJvdXRlU3R1YixcbiAgKSB7XG4gICAgc3VwZXIoZml4dHVyZSwgZGVidWdFbGVtZW50LCBpbnN0YW5jZSwgZGVidWdFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpbXVsYXRlcyBhIHJvdXRlIG5hdmlnYXRpb24gYnkgdXBkYXRpbmcgdGhlIFBhcmFtcywgUXVlcnlQYXJhbXMgYW5kIERhdGEgb2JzZXJ2YWJsZSBzdHJlYW1zLlxuICAgKi9cbiAgcHVibGljIHRyaWdnZXJOYXZpZ2F0aW9uKG9wdGlvbnM/OiBSb3V0ZU9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2hlY2tTdHViUHJlc2VudCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJhbXMpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGVTdHViLnNldFBhcmFtcyhvcHRpb25zLnBhcmFtcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5xdWVyeVBhcmFtcykge1xuICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZVN0dWIuc2V0UXVlcnlQYXJhbXMob3B0aW9ucy5xdWVyeVBhcmFtcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kYXRhKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlU3R1Yi5zZXRBbGxEYXRhKG9wdGlvbnMuZGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudCkge1xuICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZVN0dWIuc2V0RnJhZ21lbnQob3B0aW9ucy5mcmFnbWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy50cmlnZ2VyTmF2aWdhdGlvbkFuZFVwZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJvdXRlIHBhcmFtcyBhbmQgdHJpZ2dlcnMgYSByb3V0ZSBuYXZpZ2F0aW9uLlxuICAgKi9cbiAgcHVibGljIHNldFJvdXRlUGFyYW0obmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY2hlY2tTdHViUHJlc2VudCgpKSB7XG4gICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlU3R1Yi5zZXRQYXJhbShuYW1lLCB2YWx1ZSk7XG4gICAgICB0aGlzLnRyaWdnZXJOYXZpZ2F0aW9uQW5kVXBkYXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtcyBhbmQgdHJpZ2dlcnMgYSByb3V0ZSBuYXZpZ2F0aW9uLlxuICAgKi9cbiAgcHVibGljIHNldFJvdXRlUXVlcnlQYXJhbShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGVja1N0dWJQcmVzZW50KCkpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGVTdHViLnNldFF1ZXJ5UGFyYW0obmFtZSwgdmFsdWUpO1xuICAgICAgdGhpcy50cmlnZ2VyTmF2aWdhdGlvbkFuZFVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSByb3V0ZSBkYXRhIGFuZCB0cmlnZ2VycyBhIHJvdXRlIG5hdmlnYXRpb24uXG4gICAqIFRoZSBgdmFsdWVgIGlzIHR5cGVkIGFzIGBhbnlgIHNpbmNlIHRoZSBgUm91dGUjZGF0YWAgaXMgYSByZWNvcmQgd2l0aCBgYW55YCB2YWx1ZXMuXG4gICAqIFRoZXJlJ3Mgbm8gc2Vuc2UgdG8gbWFrZSBpdCBnZW5lcmljIHVudGlsIGBSb3V0ZSNkYXRhYCBzdGFydHMgc3VwcG9ydGluZyBnZW5lcmljIHR5cGVzLlxuICAgKi9cbiAgcHVibGljIHNldFJvdXRlRGF0YShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGVja1N0dWJQcmVzZW50KCkpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGVTdHViLnNldERhdGEobmFtZSwgdmFsdWUpO1xuICAgICAgdGhpcy50cmlnZ2VyTmF2aWdhdGlvbkFuZFVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSByb3V0ZSBmcmFnbWVudCBhbmQgdHJpZ2dlcnMgYSByb3V0ZSBuYXZpZ2F0aW9uLlxuICAgKi9cbiAgcHVibGljIHNldFJvdXRlRnJhZ21lbnQoZnJhZ21lbnQ6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGVja1N0dWJQcmVzZW50KCkpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGVTdHViLnNldEZyYWdtZW50KGZyYWdtZW50KTtcbiAgICAgIHRoaXMudHJpZ2dlck5hdmlnYXRpb25BbmRVcGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcm91dGUgdXJsIGFuZCB0cmlnZ2VycyBhIHJvdXRlIG5hdmlnYXRpb24uXG4gICAqL1xuICBwdWJsaWMgc2V0Um91dGVVcmwodXJsOiBVcmxTZWdtZW50W10pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jaGVja1N0dWJQcmVzZW50KCkpIHtcbiAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGVTdHViLnNldFVybCh1cmwpO1xuICAgICAgdGhpcy50cmlnZ2VyTmF2aWdhdGlvbkFuZFVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyBhIHJvdXRlciBldmVudFxuICAgKi9cbiAgcHVibGljIGVtaXRSb3V0ZXJFdmVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIWlzUm91dGVyU3R1Yih0aGlzLnJvdXRlcikpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdObyBzdHViIGZvciBSb3V0ZXIgcHJlc2VudC4gU2V0IFNwZWN0YXRvciBvcHRpb24gXCJzdHVic0VuYWJsZWRcIiB0byB0cnVlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzICcgK1xuICAgICAgICAgICdoZWxwZXIsIG9yIHVzZSBSb3V0ZXIgbmF2aWdhdGlvbiB0byB0cmlnZ2VyIGV2ZW50cy4nLFxuICAgICAgKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucm91dGVyLmVtaXRSb3V0ZXJFdmVudChldmVudCk7XG4gIH1cblxuICBwcml2YXRlIHRyaWdnZXJOYXZpZ2F0aW9uQW5kVXBkYXRlKCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZhdGVkUm91dGVTdHViIS50cmlnZ2VyTmF2aWdhdGlvbigpO1xuICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1N0dWJQcmVzZW50KCk6IHRoaXMgaXMgeyByZWFkb25seSBhY3RpdmF0ZWRSb3V0ZVN0dWI6IEFjdGl2YXRlZFJvdXRlU3R1YiB9IHtcbiAgICBpZiAoIXRoaXMuYWN0aXZhdGVkUm91dGVTdHViKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnTm8gc3R1YiBmb3IgQWN0aXZhdGVkUm91dGUgcHJlc2VudC4gU2V0IFNwZWN0YXRvciBvcHRpb24gXCJzdHVic0VuYWJsZWRcIiB0byB0cnVlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGlzICcgK1xuICAgICAgICAgICdoZWxwZXIsIG9yIHVzZSBSb3V0ZXIgdG8gdHJpZ2dlciBuYXZpZ2F0aW9uLicsXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiJdfQ==