Недавно извините, если это дубликат какого-либо квеста.Я не нашел решения для моей проблемы.
Итак, у меня есть форма с одним полем ввода.Когда я выбираю данные в onInit
, я помещаю значение в это поле и делаю его нетронутым.После того, как я вручную изменил значение, форма становится грязной, и я выполняю некоторые действия.
Он работает в компоненте, но я не могу его должным образом проверить.После того, как я сделал setValue()
для поля ввода, оно осталось нетронутым (в тесте).Но мне нужно подражать реальному вводу, и формы должны быть false
.
component.ts
ngOnInit() {
this.form = this.fb.group({
speed: this.fb.control(null)
});
this.service.getData().pipe(takeUntil(this.destroyed$))
.subscribe(info => {
this.info = info;
this.updateForm();
});
}
updateForm() {
this.form.patchValue({
speed: this.info.speed
});
this.form.get('speed').setValidators([
Validators.required,
Validators.pattern('^[0-9]*$'),
]);
this.form.markAsPristine();
}
component.spec.ts
beforeEach(() => {
fixture = TestBed.createComponent(component);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy(); // passed
});
it('should make form dirty', () => {
component.info = generateInfo();
fixture.detectChanges();
component.updateForm();
fixture.whenStable().then(() => {
expect(component.form.pristine).toBeTruthy();
expect(component.form.get('speed').value).toBe(20);
component.form.controls['speed'].setValue(10);
expect(component.form.pristine).toBeFalsy(); //error Expected true to be falsy.
});
});