我想用角度来测试一些真正没有在Anguar教程中的东西。
我试图测试当输入的值无效时输出错误消息,因此在放置超过20个字符的wor时隐藏的属性为false。
<input #cardInput type="text" class="form-control" name="tarjetaSanitaria" id="field_tarjetaSanitaria"
[(ngModel)]="paciente.tarjetaSanitaria" maxlength="20"/>
<div [hidden]="!(editForm.controls.tarjetaSanitaria?.dirty && editForm.controls.tarjetaSanitaria?.invalid)">
<small class="form-text text-danger" id="ref"
[hidden]="!editForm.controls.tarjetaSanitaria?.errors?.maxlength" translateValues="{ max: 20 }">
This field cannot be longer than 20 characters.
</small>
我的组件有这个:
paciente: Paciente = {tarjetaSanitaria: 'ddd'} as Paciente;
我的测试:
fit ('Blank input is not valid', async(() => {
comp.paciente.tarjetaSanitaria = 'ddddddddddddddddddddddddddddddddddddddddddd' ;
spyOn(comp, 'save');
var1 = comp.submitButton.nativeElement;
var1.click();
fixture.detectChanges();
expect(comp.save).toHaveBeenCalledTimes(1);
expect(fixture.debugElement.query(By.css('#ref')).nativeElement.hasAttribute('hidden')).toEqual(false);
}));
它总是失败说预期true对于false false.IF我删除了fixture.detectChanges它离开了传递。我做错了什么?
答案 0 :(得分:0)
表达式
fixture.debugElement.query(By.css('#ref')).nativeElement.hasAttribute('hidden')
读取就好像它正在测试#ref
元素是否具有名为hidden
的属性。如果是这样,结果不太可能取决于属性的值。
如果nativeElement
属性是DOM中的HTMLElement,它始终具有隐藏的&#39;属性,您应该能够使用
fixture.debugElement.query(By.css('#ref')).nativeElement.getAttribute('hidden')
但是我无法方便地验证属性的数据类型。如果它是一个字符串,你应该期望它的值是字符串&#34; false&#34;。如果它是布尔值,您可能需要期望其值为布尔值false
。
如果你不知道&#34;隐藏&#34;的数据类型?属性已经存在,或者属性中存储了true和false,添加一些调试代码以建立数据类型,然后再继续。祝你好运!