NullInjectorError: Нет поставщика для MatDialogRef! Angular Тест - PullRequest
0 голосов
/ 05 февраля 2020

Я новичок в 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)

есть идеи, ребята ?!

...