わかりましたので、しばらくの間これを理解しようとしてきました.オンラインで見つけることができるのは(タイトルのエラーメッセージに関して)、DI中の循環依存関係に言及しています-しかし、それは私の問題ではないことは99%確信しています.
テストを実行すると、次のエラーが表示されます。
Error: Can't resolve all parameters for AssetGalleryCardComponent: ([object Object], [object Object], ?)
コンポーネント CTOR:
constructor(@Inject('assetService') private assetService: AssetService,
@Inject('assetValidation') private assetValidation: AssetValidationService,
@Inject(AssetGalleryService) private assetGalleryService: AssetGalleryService) { }
テストコード:
import { AssetGalleryService } from './../asset-gallery.service';
import { AssetCardCaptionDirective } from './../../asset-card-caption.directive';
import { MaterialModule } from '@angular/material';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { AssetGalleryCardComponent } from './asset-gallery-card.component';
describe('asset-gallery-card.component', () => {
let component: AssetGalleryCardComponent;
let fixture: ComponentFixture<AssetGalleryCardComponent>;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
MaterialModule
],
declarations: [AssetCardCaptionDirective, AssetGalleryCardComponent],
providers: [
{
provide: AssetGalleryService,
useValue: {}
},
{
provide: 'assetValidation',
useValue: {}
},
{
provide: 'assetService',
useValue: {}
}
]
});
fixture = TestBed.createComponent(AssetGalleryCardComponent);
component = fixture.componentInstance;
});
it('should be defined', () => {
expect(component).toBeDefined();
});
});
テストモジュールのセットアップを取り除き、テストランナーが要求するように何かを追加しようとしましたがAssetGalleryService
、最後のビットとしてモックを追加したときにのみ、エラーがスローされ始めます。
ご覧のとおり、テストの現在の状態ではサービスから何も必要としないため、すべての依存関係をモックしました。
バレルの輸入はありません(この問題にもつながる可能性があると読みました)
「2回」AssetGalleryService
インポートされるのは、テストファイルとコンポーネントファイルの両方にインポートされるものだけです。テスト ファイルでインポートの順序を切り替えると、次のエラーが発生します。
Error: No provider for $injector!
ハイブリッド アプリを実行しているという事実におそらく関連しているのはどれですか? コンポーネントのサービスのうち 2 つが AngularJS サービスです。
編集: コンポーネント CTOR に追加forwardRef(() => ... )
すると、@Inject(AssetGalleryService)...
テストの実行時に上記と同じエラーが発生します。
どんなヒントでも大歓迎です!