好的,所以我一直在尝试解决这个问题,而我在网上可以找到的所有内容(关于标题中的错误消息)都指的是 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
作为最后一位时,错误才会开始抛出。
如您所见,我已经模拟了所有依赖项,因为测试的当前状态不需要服务中的任何内容。
没有桶进口(我读过这也可能导致这个问题)
只有“两次”AssetGalleryService
导入的是在测试文件和组件文件中都导入的东西。如果我在测试文件中切换导入顺序,我会收到以下错误:
Error: No provider for $injector!
这可能与我正在运行混合应用程序这一事实有关?该组件的 2 个服务是 AngularJS 服务。
编辑:如果我添加forwardRef(() => ... )
到@Inject(AssetGalleryService)...
组件 CTOR 中,运行测试时会出现与上述相同的错误。
非常欢迎任何提示!