如何在Angular应用程序的单元测试中检查输入值是否正确?

时间:2018-01-04 14:36:04

标签: angular

这是我的组件和组件测试:

@{
     int i = 0;
     for(var a in b) {
        //some stuff here
        <td class="inputCells">
            <input name="pr.Responses[@i].ResponseValue" type="radio" value="0">
        </td>
        //some stuff here
        i++;
    }       
}

测试没有通过。为什么?我希望当我改变组件的输入(@Component({ template: ` <div> <input [(ngModel)]="kek" /> </div> ` }) class MyComp { @Input() kek; } fdescribe('kek', () => { let component: MyComp; let fixture: ComponentFixture<MyComp>; let de: DebugElement; beforeEach(() => { TestBed.configureTestingModule({ declarations: [MyComp], imports: [FormsModule] }); }); beforeEach(() => { fixture = TestBed.createComponent(MyComp); component = fixture.componentInstance; de = fixture.debugElement; fixture.detectChanges(); }); it('', () => { component.kek = '228'; expect(de.query(By.css('input')).nativeElement.value).toBe(''); fixture.detectChanges(); expect(de.query(By.css('input')).nativeElement.value).toBe('228'); }); }); )时,输入的值会改变。为什么价值为kek

可能我错误地检查了输入的值。我该怎么做?

2 个答案:

答案 0 :(得分:0)

因为你绑定kek [(ngModel)]并且他的值在component.kek = 228之后是228,你不能指望它是'。

答案 1 :(得分:0)

可以在那里找到答案:click

此外,您可以使用fakeAsync和tick helpers。

问题在于ngModel具有异步性质。这就是你需要为此编写异步测试的原因。

示例:

  it('', fakeAsync(() => {
    component.kek = '228';

    expect(de.query(By.css('input')).nativeElement.value).toBe('');

    fixture.detectChanges();

    tick();

    expect(de.query(By.css('input')).nativeElement.value).toBe('228');
  }));