1
我有一個組件包含一個帶有3個輸入文本的表單。兩個輸入是純文本框,一個是ngbTypeahead指向ng-bootstrap的文本框。 我的表單是使用FormBuilder(反應形式)構建的。單元測試一個包含ngbTypeahead的組件
this.form = fb.group({
department: [''],
name: ['', Validators.required],
location: ['', Validators.required]
});
我的模板是這樣的:
<input type="text" class="form-control" formControlName="name"/>
...
<input type="text" class="form-control" formControlName="location"/>
...
<input
type="text"
class="form-control"
formControlName="department"
[ngbTypeahead]="autocompleteDepartments"
[resultFormatter]="formatDepartment"
[inputFormatter]="formatDepartment"/>
組件包含功能ngbTypeahead
autocompleteDepartments(text$: Observable<string>): Observable<Department> {
....
}
formatDepartment(department: Department) {
return department.name;
}
所以this.form.department.value不是一個字符串,但像這樣的對象:
interface Department {
id: number;
name: string;
foo: boolean;
bar: number;
...
}
一切正常。
現在我想單元測試我的組件,爲此我需要爲三個輸入中的每一個設置一個值。 對於兩個純投入,沒有問題:
const nameHtmlEl = <HTMLInputElement>fixture.debugElement.query(By.css('[formControlName="name"]')).nativeElement;
nameHtmlEl.value = "Toto";
nameHtmlEl.dispatchEvent(new Event('input'));
但與ngbTypeahead指令輸入,我不知道如何設置的值(即必須是處對象,而不是一個字符串): 我試過了,但它不起作用:
const departmentHtmlEl = /*<HTMLInputElement>*/ fixture.debugElement.query(By.css('[formControlName="department"]')).nativeElement;
departmentHtmlEl.value = <Department>{id: 10, name: "Foo", ...};
departmentHtmlEl.dispatchEvent(new Event('input'));