@ngneat/spectator
Version:
A powerful tool to simplify your Angular tests
106 lines • 12.7 kB
JavaScript
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==