角度基类用于单元测试

时间:2020-03-19 08:50:12

标签: angular typescript unit-testing testing

是否可以将基本类用于angular的单元测试? 因为我的很多导入和声明总是相同的。如果我添加或替换一个类,则总是必须在每个测试类中更改导入和声明。

    beforeEach(async(() => {
    TestBed.configureTestingModule({
        imports: [DialogModule, DynamicDialogModule, FormsModule, TableModule, HttpClientTestingModule, ContextMenuModule],
        declarations: [MyDialog ,OtherDialog],
        providers: [MyService],
    })
        .compileComponents();
}));

上面的代码由每个测试类中的大部分代码组成,因此这是应该在基类中的代码。

2 个答案:

答案 0 :(得分:1)

是的,有可能。您可以放

export const configureTestBed = () => TestBed.configureTestingModule({
        imports: [DialogModule, DynamicDialogModule, FormsModule, TableModule, HttpClientTestingModule, ContextMenuModule],
        declarations: [MyDialog ,OtherDialog],
        providers: [MyService],
    }).compileComponents();

在导出的函数中,在每个beforeEach(或类似的名称)中调用它。

但是,我不建议这样做。无论何时进行单元测试,都应仅import, declare, provide进行单元测试所需的内容。

如果您import, declare, provide不需要component, service, directive的很多东西,那么您会为自己制造麻烦,并且这会使测试运行缓慢。我是根据经验讲的。

这是您阅读What does “DAMP not DRY” mean when talking about unit tests?的很好的交流。另外,不要掉以轻心,如果在测试之间有一些重复的代码也可以。这将为您提供更大的灵活性和控制力。

答案 1 :(得分:0)

您可以将它们全部塞入TestingModule

@NgModule({
  imports: [
    DialogModule, 
    DynamicDialogModule, 
    FormsModule, 
    TableModule, 
    HttpClientTestingModule, 
    ContextMenuModule
  ],
  declarations: [
    MyDialog,
    OtherDialog
  ],
  providers: [MyService]
})
export class TestingModule { }

然后在所有测试中,您只需导入此模块即可:

beforeEach(async(() => {
  TestBed.configureTestingModule({ imports: [TestingModule] });
}))