这是我的组件和组件测试:
@{
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
?
可能我错误地检查了输入的值。我该怎么做?
答案 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');
}));