有没有办法为Jasmine单元测试(Angular 4)设置基类?

时间:2017-07-12 16:31:57

标签: javascript angular unit-testing typescript jasmine

我有几个.spec.ts文件,在每个之前都需要以下内容:

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [FormsModule, HttpModule, CovalentHttpModule.forRoot({
        interceptors: [{
          interceptor: CustomInterceptorService, paths: ['**'],
        }],
      }),],
      declarations: [LoginComponent],
      providers: [AuthService, { provide: Router, useClass: class { navigate = jasmine.createSpy('navigate'); } }, LoggingService, CustomInterceptorService],
    })
      .compileComponents();
  }));

有没有办法外包这个TestBed配置?现在我必须使用相同的导入和提供程序调整每个新的测试文件。

我正在寻找类似基本单元测试的东西。茉莉花可以吗?

1 个答案:

答案 0 :(得分:1)

此案例并非真正针对Jasmine。如果应该重用一个函数,可以通过JavaScript / TypeScript来完成。

辅助功能:

export const setupFooTestbed = async(() => {
    TestBed.configureTestingModule({...})...
});
...
beforeEach(setupFooTestbed);

或者它可以是TestBed.configureTestingModule接受的TestModuleMetadata对象的基类:

export FooTestModuleMetadata implements TestModuleMetadata { ... }
...
beforeEach(async(() => {
    TestBed.configureTestingModule(new FooTestModuleMetadata)...
}));

或者可以向initTestEnvironment method提供通用测试模块:

  

使用编译器工厂,PlatformRef和角度模块初始化测试环境。这些对于套件中的每个测试都是通用的。

     

这可能只调用一次,以便为当前平台上的当前测试套件设置公共提供程序。如果您绝对需要更改提供程序,请先使用resetTestEnvironment。