Наличие в Angular разделения между AppModule
, CoreModule
, FeatureModule
и SharedModule
является одной из лучших практик при развитии вашего приложения. Для CoreModule
, который должен быть импортирован только один раз, есть возможность выдать ошибку, прежде чем будет выполнена транспиляция. Он использует @Optional()
и @SkipSelf()
, и если CoreModule
будет импортирован более одного раза, он выдаст ошибку. Тем не менее, я действительно не знаю, как выполнить это модульное тестирование, и код вызывает мой тест на провал. Мой инструмент для модульного тестирования - Jest
, но если у вас есть это решение в Jasmine
, пожалуйста, поделитесь им.
Код ниже:
import { BrowserModule } from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { HttpClientModule } from '@angular/common/http';
import { NgModule, Optional, SkipSelf } from '@angular/core';
@NgModule({
exports: [BrowserModule, BrowserAnimationsModule, HttpClientModule],
imports: [BrowserModule, BrowserAnimationsModule, HttpClientModule]
})
export class CoreModule {
// Throw an error once CoreModule will be imported somewhere else in order to prevent from importing it more than once in the whole application.
constructor(@Optional() @SkipSelf() parentModule: CoreModule) {
if (parentModule) {
throw new Error(
`CoreModule has been already loaded. Import CoreModule only in the AppModule.`
);
}
}
}