typescript - angular 5 testning - konfigurera testbed globalt


Jag vill importera vissa moduler för alla testsviter såsom ngrx Store, ngx translate eller httpClientModule i ett [email -projekt med Angular 5.

i den genererade test.ts har jag lagt till en test.configureTestingModule

const testBed: TestBed = getTestBed();

testBed.initTestEnvironment(
    BrowserDynamicTestingModule,
    platformBrowserDynamicTesting()
);

testBed.configureTestingModule({
    imports: [
        HttpClientModule,
        StoreModule.forRoot(reducers, { metaReducers }),
        TranslateModule.forRoot({
            loader: {
                provide: TranslateLoader,
                useFactory: (createTranslateLoader),
                deps: [HttpClient]
            }
        }),
    ]
}

Fortfarande i en user.service.spec.ts står det ingen leverantör för Store.

user.service.spec.ts

describe('UserService', () => {
    beforeEach(() => {
        TestBed.configureTestingModule({
            providers: [UserService]
        });
    });

    it('should be created', inject([UserService], (service: UserService) => {
        expect(service).toBeTruthy();
    }));
});

Överskrider Test.configureTestingModule i user.service.spec den som finns i test.ts?

Om så är fallet, hur kan jag konfigurera TestBed på en global nivå för att undvika att importera repetitiva moduler?

Tack!

Svar #1

Det korta svaret är att TestBed kopplar in sig i Jasmines beforeEach och afterEach-återanrop som återställer testmodulen mellan VARJE test. Detta ger dig ett rent ark för varje enhetstest.

Detta betyder att du inte kan använda TestBed.configureTestingModule inuti din test.ts-fil. Du måste göra det för varje spec manuellt eller skriva dina egna standardtestinställningsverktyg för att hantera det.

Jag är utvecklaren för shallow-render som faktiskt har en lösning för detta genom att använda Shallow.alwaysProvide() för att globalt konfigurera/överskriva/mocka providers och forRoot-providers i din testmiljö. Resten av din testmodulsetup hanteras av biblioteket.

https://github.com/getsaf/shallow-render#global-providers-with-alwaysprovide

Hoppas det här hjälper.

Svar #2

Det andra svaret täcker hur configureTestingModule fungerar före/efter enskilda tester, men du behöver inte nödvändigtvis använda ett plugin för att ha en enkel "alltid tillhandahålla" moduluppsättning. Jag skapade en paths-alias i min test-tsconfig:

        "paths": {
            "@testing": ["src/testing/index"],
            "@testing/*": ["src/testing/*"]
        }

Detta låter mig skriva en TestModule-modul med alla delade importer:

@NgModule({
  imports: [
    // All repeated modules
  ],
})
export class TestModule { }

Då behöver varje anrop till configureTestingModule endast import { TestCommon } "@testing/test-common.module" och inkludera det i imports-sektionen i testmodulens konfiguration.

Relaterade artiklar