Angular 4(业力)测试输入字段的输入值

问题描述 投票:0回答:2

我正在尝试通过键盘测试哪个值进入的事件。我的问题是在输入字段设置值之后,当我打印它时打印,但是当我在whenStable()中打印它时它打印为空。我想知道为什么这个值在Whitstable()函数内被重置。我该如何解决?

我已经提到:Updating input html field from within an Angular 2 test写这个测试用例。

it('Test input field value. ', async () => {
    const divDescription = fixture.debugElement.query(By.css('#costDescription'));

    divDescription.nativeElement.value = 'text';
    divDescription.nativeElement.dispatchEvent(new Event('input'));
    fixture.detectChanges();
    console.log('sendInput : ', divDescription.nativeElement.value); // prints 'text'
    fixture.whenStable().then(() => {
      console.log('sendInput : ', divDescription.nativeElement.value); // prints ''
      expect(divDescription.nativeElement.value).toContain('text');
    });
  });
javascript angular unit-testing karma-jasmine
2个回答
2
投票

删除WhenStable()会发生这种情况。

  it('Test input field value. ', async () => {
      const divDescription = fixture.debugElement.query(By.css('#costDescription'));
      divDescription.nativeElement.value = 'text';
      divDescription.nativeElement.dispatchEvent(new Event('input'));
      fixture.detectChanges();
      expect(divDescription.nativeElement.value).toContain('text');
  });

0
投票

你必须在wheStable中移动Change detection call

it('Test input field value. ', async () => {
 const divDescription = fixture.debugElement.query(By.css('#costDescription'));

 divDescription.nativeElement.value = 'text';
 divDescription.nativeElement.dispatchEvent(new Event('input'));

 console.log('sendInput : ', divDescription.nativeElement.value); // prints 'text'
 fixture.whenStable().then(() => {
  fixture.detectChanges(); // moved inside
  console.log('sendInput : ', divDescription.nativeElement.value); 
  expect(divDescription.nativeElement.value).toContain('text');
 });
});
© www.soinside.com 2019 - 2024. All rights reserved.