• TestBed 配置(可选)

    TestBed 配置(可选)

    正如你将在测试组件中看到的,真实的组件测试通常依赖于Angular2测试实用程序TestBed,它需要一些配置。 最重要的是,我们需要使用TestBed.initTestEnvironment创建一个测试平台,然后才能使用TestBed进行单元测试。 在每次单元测试之前,必须根据需要创建,销毁和重置此测试环境。
    在angular2-redux-starter中,此配置在tests.configure.ts文件中完成,并导入到每个单元测试中以便重新使用。

    1. import {
    2. getTestBed,
    3. ComponentFixtureAutoDetect,
    4. TestBed,
    5. } from '@angular/core/testing';
    6. import {
    7. BrowserDynamicTestingModule,
    8. platformBrowserDynamicTesting,
    9. } from '@angular/platform-browser-dynamic/testing';
    10. export const configureTests = (configure: (testBed: TestBed) => void) => {
    11. const testBed = getTestBed();
    12. if (testBed.platform == null) {
    13. testBed.initTestEnvironment(
    14. BrowserDynamicTestingModule,
    15. platformBrowserDynamicTesting());
    16. }
    17. testBed.configureCompiler({
    18. providers: [
    19. {provide: ComponentFixtureAutoDetect, useValue: true},
    20. ]
    21. });
    22. configure(testBed);
    23. return testBed.compileComponents().then(() => testBed);
    24. };

    tests.configure.ts创建测试平台(如果测试平台不存在),编译模板,然后导出configureTests,然后在我们的单元测试中导入和使用它。
    下面来看看如何使用它:

    1. import { TestBed } from '@angular/core/testing';
    2. import { ExampleComponent } from './index';
    3. import { configureTests } from '../../tests.configure';
    4. import { AppModule } from '../../modules/app.module';
    5. describe('Component: Example', () => {
    6. let fixture;
    7. beforeEach(done => {
    8. const configure = (testBed: TestBed) => {
    9. testBed.configureTestingModule({
    10. imports: [AppModule],
    11. });
    12. };
    13. configureTests(configure).then(testBed => {
    14. fixture = testBed.createComponent(ExampleComponent);
    15. fixture.detectChanges();
    16. done();
    17. });
    18. });