好的,所以我一直试图解决这个问题一段时间了,我在网上找到的所有内容(关于标题中的错误信息)都是指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(() => ... )
添加到组件CTOR中的@Inject(AssetGalleryService)...
,我在运行测试时会遇到与上面相同的错误。
非常欢迎任何提示!