1

好的,所以我一直在尝试解决这个问题,而我在网上可以找到的所有内容(关于标题中的错误消息)都指的是 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 中,运行测试时会出现与上述相同的错误。

非常欢迎任何提示!

4

0 回答 0