Переменная никогда не инициализируется. Итак, строка:pipe = new NaturalType(changeDetector, ngZone);
NaturalType
в блоке beforeEach создается новый NaturalType
с неопределенным changeDetector
.
Я пытаюсь проверить нечистую трубку, используя жасмин. Труба отлично работает на ng-сервисе и выполняет намеченную работу по анимации текста.
Когда я создаю экземпляр его в своих тестовых случаях и пытаюсь запустить метод tranform, я получаю ошибку.
import { ChangeDetectorRef , NgZone } из '@ angular / core' ; import { NaturalType } из './natural-type.pipe' ; описать ( «NaturalTypePipe» , () => { let changeDetector : ChangeDetectorRef ; let ngZone : NgZone ; let pipe : NaturalType ; beforeEach (() => { pipe = new NaturalType ( changeDetector , ngZone ); }); он ( 'должен создать экземпляр натуральной трубы' , () => { expect ( pipe ). toBeTruthy (); }); он ( 'преобразует "abc" в "abc"' , () => { expect ( pipe . transform ( 'abc' )). toBe ( 'abc' ); }); }); Труба> преобразует «abc» в «abc» TypeError:
Невозможно прочитать свойство «markForCheck» неопределенного в NaturalType ../ src / app / shared / pipes / natural-type.pipe.ts.NaturalType.typeNextCharacter
Мой файл теста ниже: -
import { Pipe, PipeTransform, ChangeDetectorRef, NgZone } from '@angular/core';
/*
* Animating text as if it was being typed by a user
*/
@Pipe({name: 'naturalType', pure: false})
export class NaturalType implements PipeTransform {
private typed: string = '';
private target: string = '';
private currentIndex: number = -1;
private timeoutHandle: number = -1;
constructor( private changeDetector: ChangeDetectorRef, private ngZone: NgZone ) { }
transform(value: string, mintypingSpeed: number = 30): any {
if (this.target !== value) {
clearTimeout(this.timeoutHandle);
this.typed = '';
this.currentIndex = -1;
this.target = value;
this.typeNextCharacter(mintypingSpeed);
}
return this.typed;
}
private typeNextCharacter(mintypingSpeed: number) {
this.currentIndex++;
this.typed = this.target.substr(0, this.currentIndex);
this.changeDetector.markForCheck();
if (this.typed !== this.target) {
const time = Math.round(Math.random() * 70) + mintypingSpeed;
this.ngZone.runOutsideAngular(() => {
this.timeoutHandle = <any> setTimeout(()=> {
this.ngZone.run(() => this.typeNextCharacter(mintypingSpeed));
},time);
});
}
}
}
Мой код трубы выглядит следующим образом:
changeDetector
Моя первоначальная мысль заключалась в том, что это может быть связано с частными переменными-конструкторами и private typeNextCharacter методом в файле pipe, и я пробовал несколько вещей, но не был успешным.
Любая помощь будет оценена по достоинству. Заранее спасибо.
javascript,angular,unit-testing,jasmine,angular6,