角度单位测试:无法解析组件

时间:2017-09-04 11:34:37

标签: angular angular-unit-test

好的,所以我一直试图解决这个问题一段时间了,我在网上找到的所有内容(关于标题中的错误信息)都是指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)...,我在运行测试时会遇到与上面相同的错误。

非常欢迎任何提示!

0 个答案:

没有答案