Угловое 6 модульное тестирование: изменение первоначального в реактивной форме - PullRequest
0 голосов
/ 24 декабря 2018

Недавно извините, если это дубликат какого-либо квеста.Я не нашел решения для моей проблемы.

Итак, у меня есть форма с одним полем ввода.Когда я выбираю данные в 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.
    });
});

1 Ответ

0 голосов
/ 26 декабря 2018

попробуйте использовать это

let form = fb.group({
speed : ['']
});
form.controls.speed.setValue('10');
expect(form.pristine).toBeFalsy();

, если вы хотите проверить ошибку, вы можете написать это вместо:

expect(form.controls.speed.valid).toBe(false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...