Обновление mockobject дает неопределенную ошибку - PullRequest
0 голосов
/ 22 января 2020

Я провожу свой тест с использованием Жасмин в Angular. Мне нужно обновить значение фиктивного объекта перед запуском моих тестов. Рассматриваемый фиктивный объект здесь - mockRoute. Как видно из приведенного ниже кода, в настоящее время он установлен как

let mockRoute = { params: of({ id: '123', type: 'test' }), snapshot: {} };

. Мне нужно обновить его до

 this.mockRoute = { params: of({ id: '123', type: 'BankAccountCompliance' }), snapshot: {} };

. , К сожалению, я получаю сообщение об ошибке

Cannot set property 'mockRoute' of undefined

Как мне обновить этот mockRoute?

TestComponent

describe('ApproveComponent', () => {
  let component: ApproveComponent;
  let injector: TestBed;
  let fixture: ComponentFixture<ApproveComponent>;
  const mockService: ApprovalsService = <ApprovalsService>{
    approve: (id: string, type: string, message: string) => <Promise<any>>{},
    reset: (id: string, type: string, message: string) => <Promise<any>>{},
    reject: (id: string, type: string, message: string) => <Promise<any>>{},
    get: (type: string, id: string) => <Promise<any>>{},
  };


  let mockRoute = { params: of({ id: '123', type: 'test' }), snapshot: {} };

  function setupComponent(getResult: any = {}) {
    spyOn(mockService, nameof<ApprovalsService>('approve')).and.returnValue(Promise.resolve({}));
    spyOn(mockService, nameof<ApprovalsService>('reset')).and.returnValue(Promise.resolve({}));
    spyOn(mockService, nameof<ApprovalsService>('reject')).and.returnValue(Promise.resolve({}));
    spyOn(mockService, nameof<ApprovalsService>('get')).and.returnValue(Promise.resolve(getResult));

    TestBed.configureTestingModule({
      imports: [
        DxTextAreaModule,
        DxButtonModule,
        SharedModule,
        RouterTestingModule.withRoutes([{ path: 'approvals', component: ApproveComponent }])
      ],
      declarations: [ApproveComponent],
      providers: [
        { provide: ApprovalsService, useValue: mockService },
        { provide: ActivatedRoute, useValue: mockRoute },
        { provide: MessageService, useClass: MockMessageService },
        { provide: ConfirmationDialogService, useValue: ConfirmationDialogServiceMock },
        { provide: NgxPermissionsService, useClass: MockNgxPermissionsService }
      ]
    })
      .compileComponents();

    fixture = TestBed.createComponent(ApproveComponent);
    injector = getTestBed();
    component = fixture.componentInstance;
    spyOn((<any>component).router, 'navigate').and.returnValue(true);

    fixture.detectChanges();
  }

  it('should create and call get', () => {
    setupComponent();

    expect(component).toBeTruthy();
    expect(mockService.get).toHaveBeenCalled();
  });



  fit('should hide the Reset button when type is BankAccount', () => {
    this.mockRoute = { params: of({ id: '123', type: 'BankAccountCompliance' }), snapshot: {} };
    setupComponent();

    // component.isBankAccount = false;
    // component.type = 'BankAccountCompliance';
    // fixture.detectChanges();
    expect(component.isBankAccount).toBe(true);
  });

  it('should show the Reset button when type is BankAccount', () => {
    setupComponent();
    // component.isBankAccount = false;
    // component.type = 'IbaCompliance';
    // fixture.detectChanges();
    expect(component.isBankAccount).toBe(false);
  });



});

1 Ответ

0 голосов
/ 22 января 2020

Я решил. Все, что мне нужно было сделать, это

 mockRoute.params = of({ id: '123', type: 'BankAccountCompliance'});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...