В настоящее время наше приложение содержит около 4500 + существующих тестов Angular 1. Теперь мы включили Angular 2, используя UpgradeModule
, чтобы понизить уровень сервиса Angular 2, который используется в нашем методе работы(). Это приводит к сбою всех тестов с ошибкой Error: [$injector:unpr] Unknown Provider $$angularInjectorProvider
.
Я создал plnkr, чтобы продемонстрировать эту проблему (http://plnkr.co/edit/XuMYBr9xInqq18Kr6EAs?p=preview).
В основном модуль Angular 1 выглядит следующим образом:
// angular1.module.ts
angular.module( 'testApp' )
.run( [ 'Angular2Service', Angular2Service => { // injecting downgraded service
Angular2Service.showTestMessage();
} ] );
Где Angular2Service
понижается:
// app.module.ts
angular.module( 'testApp' )
.factory( 'Angular2Service', downgradeInjectable( Angular2Service ) );
@NgModule({
imports: [ BrowserModule, UpgradeModule ],
providers : [ Angular2Service ]
})
export class AppModule {
ngDoBootstrap() {}
}
Изначально с этим до сих пор я получал ошибку Неизвестного поставщика для самого 'Angular2Service'
при выполнении тестов, поэтому я добавил beforeEach()
, который компилирует все в AppModule
:
beforeEach( async( () => {
TestBed.configureTestingModule( {
imports : [ AppModule ]
} )
.compileComponents();
} ) );
И вот где я нахожусь с ошибкой Error: [$injector:unpr] Unknown Provider $$angularInjectorProvider
.
Выполнение самого теста - это просто тест Angular 1, который проходит, если я не введу Angular2Service
в метод run():
describe( 'testComponent', () => {
var $compile,
$scope;
beforeEach( module( 'testApp' ) );
beforeEach( inject( $injector => {
$compile = $injector.get( '$compile' );
$scope = $injector.get( '$rootScope' ).$new();
} ) );
it( 'should show the text "Test Component" in the DOM', () => {
var element = $compile( '<test-component></test-component>' )( $scope );
$scope.$apply();
expect( element[ 0 ].innerHTML ).toBe( 'Test Component' );
} );
} );
Я надеюсь, что это может быть исправлено, так что все наши чистые тесты Angular 1 могут продолжать работать без изменений, но при необходимости я могу их обновить. Любая помощь по этому поводу будет очень благодарна!