假设我们正在为名为MyTeamPageComponent
的Angular组件编写Jasmine单元测试。
它具有几个依赖项(服务,注入到其构造函数中),用于组件的各种方法中。我们还可以想象该组件已经很旧了,到目前为止还没有单元测试。现在,我们正在为刚在组件内部创建的新方法编写一个测试(我们将其称为MyTeamPageComponent.onButtonClick()
),该方法不使用任何依赖项(没有服务)。
现在,如果要测试该方法,我们将编写如下代码:
describe('MyTeamPageComponent', () => {
let component: MyTeamPageComponent;
let fixture: ComponentFixture<MyTeamPageComponent>;
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [ MyTeamPageComponent ],
schemas: [NO_ERRORS_SCHEMA],
providers: [
{
provide: Router,
useClass: EmptyServiceMock
},
{
provide: TaskRunnerService,
useClass: EmptyServiceMock
},
]
});
fixture = TestBed.createComponent(MyTeamPageComponent);
component = fixture.componentInstance;
});
it('onButtonClick', () => {
// Test the behavior of the method here
});
});
您会注意到,我们在2个地方声明了组件的依赖关系:一次在组件本身的构造函数中,一次在测试文件中(尽管我们的测试用例甚至不使用它们)。
有没有一种方法可以通过使测试运行程序默认情况下使用空对象“模拟”组件的所有依赖关系来减轻测试的脆弱性(并且更易于维护),而无需一个个地声明它们在测试文件中(并在从组件的构造函数添加/删除新的依赖项时,使该列表保持更新)?