Я пытаюсь протестировать компонент, который имеет метод ngOnDestroy(), который имеет все вызовы метода unsubscribe(). Но во время тестирования, когда я запускаю свой тестовый файл (спецификационный файл), он выдает ошибку:
cannot read property 'unsubscribe' of undefined
Я сделал следующий импорт в свой тестовый файл:
import { Subscription } from 'rxjs/Subscription';
поэтому я думаю, что этого должно быть достаточно, чтобы получить все методы в подписке, но ошибка все равно есть. Кроме того, я попытался добавить «Подписку» в список «импорт», «объявления» и «поставщики» файла тестирования, но ошибка все еще есть.
Ниже приведен фрагмент кода:
//component
import { Component, OnInit, OnDestroy } from '@angular/core';
import { Subscription } from 'rxjs/Subscription';
import {
NinjaService } from '../../../../ninja.service';
@Component({
selector: 'ninja-files',
templateUrl: './ninja-files.component.html',
styleUrls: ['./ninja-files.component.css']
})
export class ninjaFilesComponent implements OnInit, OnDestroy {
showNinjaFiles: boolean = true;
addFileSubscription: Subscription;
constructor(private ninjaService: NinjaService) {
........
}
ngOnInit() {
this.addFileSubscription = this.NinjaService.AddedFile$
.subscribe((fileFormat: FileFormat) => {
console.log('File being added: ' + fileFormat.fileName); }
ngOnDestroy() {
this.addFileSubscription.unsubscribe();
}
}
Затем у меня есть тестовый файл для этого компонента следующим образом:
import { Component, OnInit, OnDestroy } from '@angular/core';
import { Subscription } from 'rxjs/Subscription';
import {
NinjaService } from '../../../../ninja.service';
import { TestBed, async, fakeAsync ,ComponentFixture, } from '@angular/core/testing';
import { DebugElement } from '@angular/core';
import { By } from '@angular/platform-browser';
import {} from 'jasmine';
describe('Component: NinjaFiles', () => {
let fixture: ComponentFixture<ninjaFilesComponent>;
let component: ninjaFilesComponent;
let ninjaServiceStub;
beforeEach( async(() => {
//stub NinjaService
let ninjaServiceStub= {};
fixture = TestBed.configureTestingModule({
declarations: [ ninjaFilesComponent],
}).createComponent(ninjaFilesComponent);
component = fixture.componentInstance;
}));
it('Page Title', async(() => {
let pageTitle = fixture.debugElement.query(By.css('.page-title'));
expect(pageTitle).toBeTruthy();
}));
it('Counting the files', () => {
let fileCount= fixture.debugElement.query(By.css('.file-count'));
expect(fileCount).toBeTruthy();
});
Когда я запускаю приведенный выше тестовый код, он выдает мне сообщение об ошибке «невозможно прочитать свойство« отписаться »от неопределенного» (что означает, что он не может определить объект подписки «addFileSubscription», который я определил в классе компонента.
Может ли кто-нибудь предложить обходной путь?
fixture.detectChanges();
либо вbeforeEach()
в конце, либо в тесте в начале. - person Günter Zöchbauer   schedule 28.10.2016ngOnInit()
звонили? - person Günter Zöchbauer   schedule 29.10.2016