Angular 为什么在角度2测试中需要覆盖组件?

Angular 为什么在角度2测试中需要覆盖组件?,angular,unit-testing,karma-jasmine,Angular,Unit Testing,Karma Jasmine,在测试时,我对覆盖组件的使用感到困惑。 在下面的代码中,我模拟了一个名为HomeModel的服务 带有覆盖组件 TestBed .configureTestingModule({ imports: [CoreModule], declarations: [HomeComponent], providers: [ {provide: Router, useValue: router} ],

在测试时,我对覆盖组件的使用感到困惑。
在下面的代码中,我模拟了一个名为
HomeModel
的服务

带有覆盖组件

TestBed
    .configureTestingModule({
        imports: [CoreModule],
        declarations: [HomeComponent],
        providers: [
            {provide: Router, useValue: router}
        ],
        schemas: [NO_ERRORS_SCHEMA]
    })
    .overrideComponent(HomeComponent, {        
        set: {
            providers: [
                {provide: HomeModel, useClass: MockHomeModel}
            ],
        }
    })
    .compileComponents();
}));
TestBed
    .configureTestingModule({
        imports: [CoreModule],
        declarations: [HomeComponent],
        providers: [
            {provide: Router, useValue: router},
            {provide: HomeModel, useClass: MockHomeModel}
        ],
        schemas: [NO_ERRORS_SCHEMA]
    })
    .compileComponents();
}));
不带覆盖组件

TestBed
    .configureTestingModule({
        imports: [CoreModule],
        declarations: [HomeComponent],
        providers: [
            {provide: Router, useValue: router}
        ],
        schemas: [NO_ERRORS_SCHEMA]
    })
    .overrideComponent(HomeComponent, {        
        set: {
            providers: [
                {provide: HomeModel, useClass: MockHomeModel}
            ],
        }
    })
    .compileComponents();
}));
TestBed
    .configureTestingModule({
        imports: [CoreModule],
        declarations: [HomeComponent],
        providers: [
            {provide: Router, useValue: router},
            {provide: HomeModel, useClass: MockHomeModel}
        ],
        schemas: [NO_ERRORS_SCHEMA]
    })
    .compileComponents();
}));
我们不能在
providers
中指定
useClass
,而不是覆盖组件吗?在我的例子中,它只有在我重写时才起作用。后者不起作用


overrideComponent
在测试中的主要用途是什么?

不起作用
实际上适用于一切。到底什么不起作用?@smnbbrv在我的例子中,每个测试用例都失败了。返回null或undefined。
useClass
肯定足以模拟类,因此这不应该是问题的原因。是否存在某些编译错误,组件是否缺少其他提供程序?是否没有其他编译错误。