TypeError: Невозможно прочитать свойство 'user' из null - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь пройти модульный тест для моей функции isAdmin ().Функция должна просто вернуть роль.Он говорит, что «пользователь» не может быть прочитан, так как я взял роль из информации, предоставленной currentUser в файле .ts.Я не уверен, как передать информацию о пользователе в мой файл тестового кода (.spec.ts).

TypeError: Невозможно прочитать свойство 'user' из null

list-user.component.ts

constructor(public auth: AuthenticationService, public router: Router, public dialog: MatDialog) { }

ngOnInit() {
    const currentUser = JSON.parse(localStorage.getItem('currentUser')).user;
    this.role = currentUser.role;
}

isAdmin() {
    return this.role.toLowerCase() === 'admin';
  }

list-user.component.spec.ts

import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { ListUserComponent } from './list-user.component';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { CustomMaterialModule } from 'src/app/core/material.module';
import { HttpClientModule } from '@angular/common/http';
import { RouterTestingModule } from '@angular/router/testing';
import { from } from 'rxjs';

describe('ListUserComponent', () => {
  let component: ListUserComponent;
  let fixture: ComponentFixture<ListUserComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ ListUserComponent ],
      imports: [
        FormsModule,
        ReactiveFormsModule,
        CustomMaterialModule,
        HttpClientModule,
        RouterTestingModule
    ]
    })
    .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(ListUserComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });



it('should call isAdmin()', () => {

  let role = 'admin'
  spyOn(component, 'isAdmin').and.callFake(() => {
    return from([role]);
  });
  component.isAdmin();
  expect(component.role).toBe(role);
});

});

1 Ответ

0 голосов
/ 06 февраля 2019

Это может быть null, поскольку localStorage, возможно, не было инициализировано клавишей currentUser.Поэтому вам необходимо проверить, существует ли значение с ключом currentUser

ngOnInit() {
    const currentUser = JSON.parse(localStorage.getItem('currentUser'));
    this.role = currentUser ? currentUser.user.role : DEFAULT_ROLE; // You have to define a default role
}

Обновить

А также, как указано в комментарии @DeWetvanAs, вам необходимомакет localStorage во время модульного тестирования.

Пример: Как смоделировать localStorage в модульных тестах JavaScript?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...