Я новичок в angular и jhipster, я отредактировал компонент входа, я добавил formbuilder и MatDialogRef и обновил модульный тест:
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { MatDialogRef } from '@angular/material/dialog';
/* Other imports */
@Component({
selector: 'jhi-login-modal',
templateUrl: './login.component.html',
styleUrls: ['login.scss']
})
export class JhiLoginModalComponent implements OnInit {
authenticationError: boolean;
hide = true;
loginForm: FormGroup;
constructor(
private readonly eventManager: JhiEventManager,
private readonly loginService: LoginService,
private readonly stateStorageService: StateStorageService,
private readonly router: Router,
private readonly fb: FormBuilder,
private readonly dialogRef: MatDialogRef<JhiLoginModalComponent>
) {}
ngOnInit(): void {
this.loginForm = this.fb.group({
username: ['', Validators.required],
password: ['', Validators.required],
rememberMe: true
});
}
/* Rest of code */
}
Затем я обновил тест file:
import {ComponentFixture, TestBed, async, inject, fakeAsync, tick} from '@angular/core/testing';
import {FormBuilder, ReactiveFormsModule, Validators} from '@angular/forms';
import {JhiEventManager} from 'ng-jhipster';
import {JhiLoginModalComponent} from 'app/shared/login/login.component';
import {StateStorageService} from 'app/core/auth/state-storage.service';
import {BatimentTestModule} from '../../../test.module';
import {MockLoginService} from '../../../helpers/mock-login.service';
import {MockStateStorageService} from '../../../helpers/mock-state-storage.service';
import {MatDialogModule, MatDialogRef} from '@angular/material/dialog';
describe('Component Tests', () => {
describe('LoginComponent', () => {
let comp: JhiLoginModalComponent;
let fixture: ComponentFixture<JhiLoginModalComponent>;
// create new instance of FormBuilder
const formBuilder: FormBuilder = new FormBuilder();
let mockLoginService: any;
let mockStateStorageService: any;
let mockRouter: any;
let mockEventManager: any;
let mockActiveModal: any;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [BatimentTestModule, ReactiveFormsModule, MatDialogModule],
declarations: [JhiLoginModalComponent],
providers: [
{
provide: LoginService,
useClass: MockLoginService
},
{
provide: StateStorageService,
useClass: MockStateStorageService
},
{
provide: FormBuilder,
useValue: formBuilder
},
{provide: MatDialogRef,
useValue: {}}
]
})
.overrideTemplate(JhiLoginModalComponent, '')
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(JhiLoginModalComponent);
comp = fixture.componentInstance;
console.log(comp);
comp.loginForm = formBuilder.group({
username: ['', Validators.required],
password: ['', Validators.required],
rememberMe: true
});
comp.ngOnInit();
fixture.detectChanges();
mockLoginService = fixture.debugElement.injector.get(LoginService);
mockStateStorageService = fixture.debugElement.injector.get(StateStorageService);
mockRouter = fixture.debugElement.injector.get(Router);
mockEventManager = fixture.debugElement.injector.get(JhiEventManager);
mockActiveModal = fixture.debugElement.injector.get(NgbActiveModal);
});
it('should authenticate the user upon login when previous state was set', inject(
[],
fakeAsync(() => {
// GIVEN
const credentials = {
username: 'admin',
password: 'admin',
rememberMe: true
};
comp.loginForm.patchValue({
username: 'admin',
password: 'admin',
rememberMe: true
});
mockLoginService.setResponse({});
mockStateStorageService.setResponse('admin/users?page=0');
// WHEN/
comp.login();
tick(); // simulate async
// THEN
expect(comp.authenticationError).toEqual(false);
expect(mockActiveModal.dismissSpy).toHaveBeenCalledWith('login success');
expect(mockEventManager.broadcastSpy).toHaveBeenCalledTimes(1);
expect(mockLoginService.loginSpy).toHaveBeenCalledWith(credentials);
expect(mockStateStorageService.getUrlSpy).toHaveBeenCalledTimes(1);
expect(mockStateStorageService.storeUrlSpy).toHaveBeenCalledWith(null);
expect(mockRouter.navigateByUrlSpy).toHaveBeenCalledWith('admin/users?page=0');
})
));
/* Other tests */
});
ошибка, которую я получаю:
StaticInjectorError (DynamicTestModule) [JhiLoginModalComponent -> MatDialogRef]: StaticInjectorError (платформа: ядро) [JhiLoginRefDalDom] : NullInjectorError: Нет поставщика для MatDialogRef! в NullInjector.get (node_modules/@angular/core/bundles/core.umd.js: 3083: 7) в resolToken (../packages/core/src/render3/context_discovery.ts:297:66) в tryResolveToken (../packages/core/src/render3/context_discovery.ts:285:2) в StaticInjector.get (../packages/core/src/render3/context_discovery.ts:279:55) в resolToken (../ packages / core / src / render3 / context_discovery.ts: 297: 66) в tryResolveToken (../packages/core/src/render3/context_discovery.ts:285:2) в StaticInjector.get (../packages/core/) src / render3 / context_discovery.ts: 279: 55) в resolNgModuleDep (../packages/core/src/render3/instructions.ts:1032:26) в NgModuleRef_.get (node_modules / @ angular / core / bundles / core). ум. js: 6810: 10895) в resolDep (../packages/core/src/render3/instructions.ts:1116:55) в createClass (../packages/core/src/render3/instructions.ts: 1091: 13) в createDirectiveInstance (../packages/core/src/render3/instructions.ts:1090:5) в createViewNodes (node_modules/@angular/core/bundles/core.umd.js: 69 67: 2760) в createRootView (node_modules/@angular/core/bundles/core.umd.js: 6967: 280) в callWithDebugContext (node_modules/@angular/core/bundles/core.umd.js: 7020: 1250) в Object.debugCreateRootView [as createRootView] (node_modules/@angular/core/bundles/core.umd.js: 6998: 3227) в ComponentFactory_.create (node_modules/@angular/core/bundles/core.umd. js: 6808: 318) в initComponent (node_modules/@angular/core/bundles/core-testing.umd.js: 2644: 45) в ZoneDelegate.invoke (node_modules / zone.js / dist / zone. *) 1023 *: 440: 160) в ProxyZoneSpe c .onInvoke (node_modules / zone.js / dist / proxy. js: 151: 35) в ZoneDelegate.invoke (node_modules / zone.js / dist / zone. js: 440: 48) в Object.onInvoke (../packages/core/src/render3/styling/class_and_style_bindings.ts:1223:6) в ZoneDelegate.invoke (node_modules / zone.js / dist / zone. js : 440: 48) в Zone.run (node_modules / zone.js / dist / zone. js: 167: 37) в NgZone.run (../packages/core/src/render3/styling/class_and_style_bindings.ts: 1194: 45) при Т estBedViewEngine.createComponent (node_modules/@angular/core/bundles/core-testing.umd.js: 2648: 56) в Function.TestBedViewEngine.createComponent (node_modules/@angular/core/bundles/core-testing.umd.js: 2180: 38) в src / test / javascript / spec / app / shared / login / login.component.spe c .ts: 49: 25 в ZoneDelegate.invoke (node_modules / zone.js / dist / zone) . js: 440: 160) в ProxyZoneSpe c .onInvoke (node_modules / zone.js / dist / proxy. js: 151: 35) в ZoneDelegate.invoke (node_modules / zone.js / dist / zone). js: 440: 48) в Zone.run (node_modules / zone.js / dist / zone. js: 167: 37) в Object. (node_modules / jest-preset-angular / zone-patch / index. js: 51: 54)
есть идеи, ребята ?!