Angular 4 组件单元测试无法解析所有参数(?)

Angular 4 component unit test cannot resolve all parameters (?)

我正在尝试对我的组件进行单元测试,但基本测试失败。
cannot resolve all parameters for MyComponent(?.)

我尝试在组件的构造函数中添加 forwardRef(),但它仍然有效。但我不想因为测试失败而使用它,也不推荐使用它。

如有错字请忽略。我添加了代码片段。抱歉,我无法在此处添加实际代码。

源码
./服务
我的服务-c.ts

import { MyServiceQ } from './my-service-q';
    ...
    @Injectable()
    export class MyServiceC {
        constructor(private myServiceQ: MyServiceQ) { }
        ...
        getMyServiceQ(){
            return this.myServiceQ;
        }
    }

./组件
我的-component.ts

import { MyServiceC } from '../services/my-service-c';
    @Component() {...}
    export class MyComponent {
        private myServiceQ;
        constructor(private myServiceC: MyServiceC) {
            this.myServiceQ = this.myServiceC.getMyServiceQ();
        }
    }

my-component.spec.ts

import { MyServiceC } from '../services/my-service-c';
    import { MockMyServiceC } from '../fixtures/mock-my-service-c';
    import { MyComponent } from './my-component';
    ..other imports...

    beforeEach( () => {
        TestBed.configureTestingModule({
            providers: [
                { provide: MyServiceC, useClass: MockMyServiceC }
            ],
            declarations: [ MyComponent ]
        });
        fixture = TestBed.createComponent(MyComponent);
        component = fixture.componentInstance;
        fixture.detectChanges();
    });

    it('should be defined', 
        () => expect(component).toBeDefined();
    );      

如果您有任何建议,请告诉我。很长一段时间以来,我一直在努力寻找解决方案。 提前致谢..

您在评论中表示“我有两个与实际服务相同的模拟服务(MockMyServiceC 注入 MockMyServiceQ)。

目前您在测试中注入 MockMyServiceC MockMyServiceC 的所有依赖项也必须解决,但您没有提供它们。

稍微更改一下测试应该可以解决您的问题:

TestBed.configureTestingModule({
    providers: [
        MockMyServiceQ,
        { provide: MyServiceC, useClass: MockMyServiceC }
    ],
    declarations: [ MyComponent ]
});

一个提示: 这很快就会变得难以维护。您模拟的服务应该始终注入相同的真实服务。然后你可以像这样提供它们:

TestBed.configureTestingModule({
    providers: [
        { provide: MyServiceQ, useClass: MockMyServiceQ },
        { provide: MyServiceC, useClass: MockMyServiceC }
    ],
    declarations: [ MyComponent ]
});

否则你会直接注入 MockServices 并通过 useClass 提供它们。想想如果您的组件也注入 MyServiceQ,您的测试会发生什么。