Мое приложение имеет NavComponent
и AppComponent
. AppComponent
является компонентом начальной загрузки. AppComponent
имеет DialogBoxComponent
. Всякий раз, когда DialogBox
закрывается, он генерирует событие. Я хочу, чтобы NavComponent
подписался на это событие. Для этого я ввел AppComponent
в NavComponent
constructor(private appComponent:AppComponent,private dialogService:DialogBoxService,private userManagementService: UserManagementService, private fb:FormBuilder, private helper:HelperService) {
}
, а затем подписался на DialogBoxComponent
'событие закрытия.
subscribeToDialogCloseEvent(){
this.appComponent.dialogComponent.dialogCloseEvent.subscribe((event:DialogCloseReturnContext)=>{
...
}
Приложение работает нормально в разработкережиме, но когда я пытаюсь написать для него модульный тест, я получаю сообщение об ошибке
Error: StaticInjectorError(DynamicTestModule)[NavComponentComponent -> AppComponent]:
StaticInjectorError(Platform: core)[NavComponentComponent -> AppComponent]:
NullInjectorError: No provider for AppComponent!
Установлен тестовый набор
describe('NavComponentComponent - user not signed in initially', () => {
let component: NavComponentComponent;
let fixture: ComponentFixture<NavComponentComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [NavComponentComponent,
AppComponent,
ContentComponentComponent,
FooterComponentComponent,
HomepageContentComponentComponent,
ShowErrorsComponent,
ProgressBarComponent,
SignupComponentComponent,
HomepageContentComponentComponent,
NewPracticeQuestionComponent,
PraticeQuestionListComponent,
QuestionDetailsComponent,
PageNotFoundComponent,
DialogBoxComponent],
imports: [ReactiveFormsModule, RouterModule, HttpClientModule, AppRoutingModule],
providers: [WebToBackendInterfaceService,
AuthService,
{provide: UserManagementService, useClass: MockUserManagementServiceUserNotSignedInInitially},//mock user management service
HelperService,
{provide: DialogBoxService, useClass: MockDialogBoxService},
{provide: APP_BASE_HREF, useValue: '/'}],
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(NavComponentComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
fit('should get initial signin state and set sign in state to false if user isn\'t initially signed in',(done)=>{
let navComponent:NavComponentComponent = component;
/*The idea of unit test is that UserManagementService might not be available yet
so mock UserManagementService
*/
let userManagementService = TestBed.get(UserManagementService);//component.userManagementService;
console.log('got mocked user management service',userManagementService);
localStorage.removeItem('id_token');
localStorage.removeItem('user-details');
//component.subscribeToUserSignInState();
console.log('component is ',navComponent);
setTimeout(()=>{
expect(navComponent.userLoggedIn).toBeFalsy();
done();
},2000);
});
});