/
githubmirror
/
angular
Обзор
Документация
Войти
/
githubmirror
/
angular
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
packages/upgrade/static/testing/src/create_angularjs_testing_module.ts
94 строки
4 KB
Andrew Kushnir
refactor(upgrade): convert scripts within `packages/upgrade` to relative imports (#60238)
27 мар 2025, 06:35
27 мар 2025, 06:35
3439387
Код
Авторство
О чём код?
/** * @license * Copyright Google LLC All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file at https://angular.dev/license */ import {Injector} from '@angular/core'; import {TestBed} from '@angular/core/testing'; import {ɵangular1 as ng, ɵconstants} from '../../../static'; import {UpgradeAppType} from '../../../src/common/src/util'; /** * A helper function to use when unit testing AngularJS services that depend upon downgraded Angular * services. * * This function returns an AngularJS module that is configured to wire up the AngularJS and Angular * injectors without the need to actually bootstrap a hybrid application. * This makes it simpler and faster to unit test services. * * Use the returned AngularJS module in a call to * [`angular.mocks.module`](https://docs.angularjs.org/api/ngMock/function/angular.mock.module) to * include this module in the unit test injector. * * In the following code snippet, we are configuring the `$injector` with two modules: * The AngularJS `ng1AppModule`, which is the AngularJS part of our hybrid application and the * `Ng2AppModule`, which is the Angular part. * * {@example upgrade/static/ts/full/module.spec.ts region='angularjs-setup'} * * Once this is done we can get hold of services via the AngularJS `$injector` as normal. * Services that are (or have dependencies on) a downgraded Angular service, will be instantiated as * needed by the Angular root `Injector`. * * In the following code snippet, `heroesService` is a downgraded Angular service that we are * accessing from AngularJS. * * {@example upgrade/static/ts/full/module.spec.ts region='angularjs-spec'} * * <div class="docs-alert docs-alert-important"> * * This helper is for testing services not components. * For Component testing you must still bootstrap a hybrid app. See `UpgradeModule` or * `downgradeModule` for more information. * * </div> * * <div class="docs-alert docs-alert-important"> * * The resulting configuration does not wire up AngularJS digests to Zone hooks. It is the * responsibility of the test writer to call `$rootScope.$apply`, as necessary, to trigger * AngularJS handlers of async events from Angular. * * </div> * * <div class="docs-alert docs-alert-important"> * * The helper sets up global variables to hold the shared Angular and AngularJS injectors. * * * Only call this helper once per spec. * * Do not use `createAngularJSTestingModule` in the same spec as `createAngularTestingModule`. * * </div> * * Here is the example application and its unit tests that use `createAngularTestingModule` * and `createAngularJSTestingModule`. * * <code-tabs> * <code-pane header="module.spec.ts" path="upgrade/static/ts/full/module.spec.ts"></code-pane> * <code-pane header="module.ts" path="upgrade/static/ts/full/module.ts"></code-pane> * </code-tabs> * * * @param angularModules a collection of Angular modules to include in the configuration. * * @publicApi */ export function createAngularJSTestingModule(angularModules: any[]): string { return ng .module_('$$angularJSTestingModule', []) .constant(ɵconstants.UPGRADE_APP_TYPE_KEY, UpgradeAppType.Static) .factory(ɵconstants.INJECTOR_KEY, [ ɵconstants.$INJECTOR, ($injector: ng.IInjectorService) => { TestBed.configureTestingModule({ imports: angularModules, providers: [{provide: ɵconstants.$INJECTOR, useValue: $injector}], }); return TestBed.inject(Injector); }, ]).name; }