From a827b584874348f0ee697d854e48e99209d14fd2 Mon Sep 17 00:00:00 2001 From: Robert Jackson Date: Wed, 13 Jan 2021 18:24:18 -0500 Subject: [PATCH] Lazily setup the router in non-application tests for component (cherry picked from commit 8816a25365be148c994a58f3643933d31fe8ece7) --- .../link-to/rendering-angle-test.js | 6 ++- .../routing/lib/services/routing.ts | 16 ++++++- .../application/tests/application_test.js | 1 - packages/@ember/engine/index.js | 2 - packages/@ember/engine/tests/engine_test.js | 1 - .../query_param_async_get_handler_test.js | 47 ++++++++++--------- 6 files changed, 45 insertions(+), 28 deletions(-) diff --git a/packages/@ember/-internals/glimmer/tests/integration/components/link-to/rendering-angle-test.js b/packages/@ember/-internals/glimmer/tests/integration/components/link-to/rendering-angle-test.js index 220c9eaed2f..fd6aa02f5bc 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/components/link-to/rendering-angle-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/components/link-to/rendering-angle-test.js @@ -101,7 +101,11 @@ moduleFor( ['@test should be able to be inserted in DOM when the router is not present - block']() { this.render(`Go to Index`); - this.assertText('Go to Index'); + this.assertComponentElement(this.element.firstChild, { + tagName: 'a', + attrs: { href: '#/' }, + content: 'Go to Index', + }); } } ); diff --git a/packages/@ember/-internals/routing/lib/services/routing.ts b/packages/@ember/-internals/routing/lib/services/routing.ts index 8321daadbe4..d459c07bacd 100644 --- a/packages/@ember/-internals/routing/lib/services/routing.ts +++ b/packages/@ember/-internals/routing/lib/services/routing.ts @@ -2,12 +2,16 @@ @module ember */ +import { getOwner, Owner } from '@ember/-internals/owner'; +import { symbol } from '@ember/-internals/utils'; import { readOnly } from '@ember/object/computed'; import { assign } from '@ember/polyfills'; import Service from '@ember/service'; import EmberRouter, { QueryParam } from '../system/router'; import RouterState from '../system/router_state'; +const ROUTER = symbol('ROUTER') as string; + /** The Routing service is used by LinkComponent, and provides facilities for the component/view layer to interact with the router. @@ -19,7 +23,17 @@ import RouterState from '../system/router_state'; @class RoutingService */ export default class RoutingService extends Service { - router!: EmberRouter; + get router(): EmberRouter { + let router = this[ROUTER]; + if (router !== undefined) { + return router; + } + const owner = getOwner(this) as Owner; + router = owner.lookup('router:main') as EmberRouter; + router.setupRouter(); + return (this[ROUTER] = router); + } + hasRoute(routeName: string) { return this.router.hasRoute(routeName); } diff --git a/packages/@ember/application/tests/application_test.js b/packages/@ember/application/tests/application_test.js index 9b2601e4664..2bce001fcba 100644 --- a/packages/@ember/application/tests/application_test.js +++ b/packages/@ember/application/tests/application_test.js @@ -156,7 +156,6 @@ moduleFor( verifyRegistration(assert, application, 'component:textarea'); verifyRegistration(assert, application, 'service:-routing'); - verifyInjection(assert, application, 'service:-routing', 'router', 'router:main'); // DEBUGGING verifyRegistration(assert, application, 'resolver-for-debugging:main'); diff --git a/packages/@ember/engine/index.js b/packages/@ember/engine/index.js index 62844532a9e..0ab30e9b50e 100644 --- a/packages/@ember/engine/index.js +++ b/packages/@ember/engine/index.js @@ -511,8 +511,6 @@ function commonSetupRegistry(registry) { // Register the routing service... registry.register('service:-routing', RoutingService); - // Then inject the app router into it - registry.injection('service:-routing', 'router', 'router:main'); // DEBUGGING registry.register('resolver-for-debugging:main', registry.resolver, { diff --git a/packages/@ember/engine/tests/engine_test.js b/packages/@ember/engine/tests/engine_test.js index 428ea1f0d87..018b342a4e8 100644 --- a/packages/@ember/engine/tests/engine_test.js +++ b/packages/@ember/engine/tests/engine_test.js @@ -81,7 +81,6 @@ moduleFor( verifyRegistration(assert, engine, 'component:textarea'); verifyRegistration(assert, engine, 'service:-routing'); - verifyInjection(assert, engine, 'service:-routing', 'router', 'router:main'); // DEBUGGING verifyRegistration(assert, engine, 'resolver-for-debugging:main'); diff --git a/packages/ember/tests/routing/query_params_test/query_param_async_get_handler_test.js b/packages/ember/tests/routing/query_params_test/query_param_async_get_handler_test.js index b2f64ec5ee6..629cb4777b5 100644 --- a/packages/ember/tests/routing/query_params_test/query_param_async_get_handler_test.js +++ b/packages/ember/tests/routing/query_params_test/query_param_async_get_handler_test.js @@ -21,28 +21,31 @@ moduleFor( }, setupRouter() { - this._super(...arguments); - let { _handlerPromises: handlerPromises, _seenHandlers: seenHandlers } = this; - let getRoute = this._routerMicrolib.getRoute; - - this._routerMicrolib.getRoute = function (routeName) { - fetchedHandlers.push(routeName); - - // Cache the returns so we don't have more than one Promise for a - // given handler. - return ( - handlerPromises[routeName] || - (handlerPromises[routeName] = new RSVP.Promise((resolve) => { - setTimeout(() => { - let handler = getRoute(routeName); - - seenHandlers[routeName] = handler; - - resolve(handler); - }, 10); - })) - ); - }; + let isNewSetup = this._super(...arguments); + if (isNewSetup) { + let { _handlerPromises: handlerPromises, _seenHandlers: seenHandlers } = this; + let getRoute = this._routerMicrolib.getRoute; + + this._routerMicrolib.getRoute = function (routeName) { + fetchedHandlers.push(routeName); + + // Cache the returns so we don't have more than one Promise for a + // given handler. + return ( + handlerPromises[routeName] || + (handlerPromises[routeName] = new RSVP.Promise((resolve) => { + setTimeout(() => { + let handler = getRoute(routeName); + + seenHandlers[routeName] = handler; + + resolve(handler); + }, 10); + })) + ); + }; + } + return isNewSetup; }, _getQPMeta(routeInfo) {