Angular 在角度测试中将窗体控件设置为“脏”
我有以下组件模板:Angular 在角度测试中将窗体控件设置为“脏”,angular,angular-material,angular-components,angular-forms,angular-test,Angular,Angular Material,Angular Components,Angular Forms,Angular Test,我有以下组件模板: {{model.title}} 一些错误 在我的测试中,我想测试错误状态。但是,我需要访问测试中的输入控件“#checkbox”,并将其设置为dirty it('invalid上应显示错误',()=>{ const checkbox=fixture.debugElement.query(By.directive(MatCheckbox)) //我有mat复选框,但是不确定如何访问表单控件以设置为dirty }) 如果我将ViewChild添加到我的组件中,我可以在测试中
{{model.title}}
一些错误
在我的测试中,我想测试错误状态。但是,我需要访问测试中的输入控件“#checkbox”,并将其设置为dirty
it('invalid上应显示错误',()=>{
const checkbox=fixture.debugElement.query(By.directive(MatCheckbox))
//我有mat复选框,但是不确定如何访问表单控件以设置为dirty
})
如果我将ViewChild添加到我的组件中,我可以在测试中访问它:
@组件({
选择器:“我的复选框”,
templateUrl:'./checkbox.component.html',
样式URL:['./checkbox.component.scss']
})
导出类CheckboxComponent{
@Input()模型:任意;
//永远不要在生产中使用它,而是添加到测试中
@ViewChild('checkbox',{static:false})checkbox:NgModel;
}
...
//在这一点上,我可以通过组件访问测试
component.checkbox.control.markAsDirty();
但是,我希望在测试中访问模型,而不向组件本身添加变量,因为该模型从未使用过
编辑:我还尝试修改该值以将控件切换为“脏”:
it('invalid上应显示错误',(done)=>{
component.model.value=false//将值设置为未选中
fixture.detectChanges()
fixture.whenStable()然后(()=>{
const error=fixture.debugElement.query(By.directive(MatError))
//此处错误为null,已验证控件未标记为脏
完成();
})
})
我可以按如下方式抓取模型:
const model = fixture.debugElement.query(By.directive(MatCheckbox)).references['checkbox']
然后标记为肮脏
model.control.markAsDirty()
我能够抓取如下模型:
const model = fixture.debugElement.query(By.directive(MatCheckbox)).references['checkbox']
然后标记为肮脏
model.control.markAsDirty()
您不能直接使用特定控件本身fixture.debugElement.query(By.css(“#Id”))的Id进行检查吗?markAsDirty()您不能直接使用特定控件本身fixture.debugElement.query(By.css(“#Id”))的Id进行检查吗。要获得访问权限,需要将组件遍历到该元素并找到对该元素的引用。如果您可以得到它,那么会有一个onNgmodelCange事件,您可以直接更改表单控件的脏值。这不应该是不可能的,但可能是那样的。阅读这篇文章@JohnPeters,它似乎意味着将ngModelChange添加到模板中只是为了测试。对于这种状态,您需要做的就是更改值。那就脏了。我还提到了如何尝试访问模型。你试过了吗?@JohnPeters是的,看起来很简单,也试过了。我将更新答案。这种类型的NgModel绑定会自动创建一个表单控件。要获得访问权限,需要将组件遍历到该元素并找到对该元素的引用。如果您可以得到它,那么会有一个onNgmodelCange事件,您可以直接更改表单控件的脏值。这不应该是不可能的,但可能是那样的。阅读这篇文章@JohnPeters,它似乎意味着将ngModelChange添加到模板中只是为了测试。对于这种状态,您需要做的就是更改值。那就脏了。我还提到了如何尝试访问模型。你试过了吗?@JohnPeters是的,看起来很简单,也试过了。我会更新答案。