Angular Тестирование: невозможно прочитать свойство 'images' из неопределенного - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь запустить тесты кармы на компоненте Angular с именем AlbumInfoComponent. В этом компоненте у меня есть функция с именем getStyles(), которая выполняет следующие действия:

  getStyles() {
    return {
      "background-image":'url('+this.data.images[1].url+')'
    }
  }

она использует переменную с именем data, инициализированную как: private user: {} = {}

У меня есть тест запускается только стандартный тест should create. Хотя по какой-то причине при запуске теста я получаю TypeError: Cannot read property 'images' of undefined. Сначала я думал, что, поскольку Angular не знает, что в данных есть значение, называемое images, произойдет сбой. Из-за этого я попытался установить компонент равным данным фиктивного компонента. Вот мой тестовый код:

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

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [ LandingComponent, FaIconComponent, HomeComponent, LoginComponent, AlbumInfoComponent, RecentReleasesComponent, QueueComponent, SearchComponent, TitleComponent, UserComponent, SearchBarComponent, RecentReleaseComponent, YourQueueComponent    ],
      imports: [FormsModule, HttpClientTestingModule,         RouterTestingModule.withRoutes([]), MatSnackBarModule    ],
      providers: [InfoService, HttpClient, TokenService ]
    })
    .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(AlbumInfoComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });
  it('should create', () => {    
    component.data = {
      "images": [
      {
        "height": 640,
        "url": "https://i.scdn.co/image/ab67616d0000b273626d2ce1fb80955645d4d787",
        "width": 640
      },
      {
        "height": 300,
        "url": "https://i.scdn.co/image/ab67616d00001e02626d2ce1fb80955645d4d787",
        "width": 300
      },
      {
        "height": 64,
        "url": "https://i.scdn.co/image/ab67616d00004851626d2ce1fb80955645d4d787",
        "width": 64
      }
      ]
    }
    expect(component).toBeTruthy();
  });
});

Есть ли способ заставить переменную данных быть равной фиктивным данным, чтобы исправить ошибку?

1 Ответ

0 голосов
/ 04 мая 2020

Этот ответ сработал: https://github.com/ngrx/platform/issues/1546#issuecomment -461945741

Нам нужно уничтожать прибор после каждого теста. так сделайте это:

  afterEach(() => {
    fixture.destroy();
  });
...