如何通过默认情况下模拟组件的所有依赖关系来使Angular测试更不易碎?

时间:2018-07-25 07:44:32

标签: angular unit-testing jasmine

假设我们正在为名为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个地方声明了组件的依赖关系:一次在组件本身的构造函数中,一次在测试文件中(尽管我们的测试用例甚至不使用它们)。

有没有一种方法可以通过使测试运行程序默认情况下使用空对象“模拟”组件的所有依赖关系来减轻测试的脆弱性(并且更易于维护),而无需一个个地声明它们在测试文件中(并在从组件的构造函数添加/删除新的依赖项时,使该列表保持更新)?

0 个答案:

没有答案