我偶然发现了同样的问题。克里斯是对的,ng-select 源提供了一些测试功能,我只是从中构建了这个文件。这使得只选择一个由 css-selector 查询的 select 选项可能会更容易一些。让我知道它是否适合你。
import { DebugElement } from '@angular/core';
import { ComponentFixture, tick } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
export class TestsErrorHandler {}
export enum KeyCode {
Tab = 9,
Enter = 13,
Esc = 27,
Space = 32,
ArrowUp = 38,
ArrowDown = 40,
Backspace = 8
}
export function tickAndDetectChanges(fixture: ComponentFixture<any>) {
fixture.detectChanges();
tick();
}
export function selectOption(fixture, selector: string, arrowDowns: number) {
triggerKeyDownEvent(getNgSelectElement(fixture, selector), KeyCode.Space); // open
tickAndDetectChanges(fixture); // need to tick and detect changes
for (let i = 0; i < arrowDowns; i++) {
triggerKeyDownEvent(getNgSelectElement(fixture, selector), KeyCode.ArrowDown);
}
tickAndDetectChanges(fixture); dropdown fully inits after promise is resolved
triggerKeyDownEvent(getNgSelectElement(fixture, selector), KeyCode.Enter); // select
fixture.detectChanges();
}
export function getNgSelectElement(fixture: ComponentFixture<any>, selector: string): DebugElement {
return fixture.debugElement.query(By.css(selector));
}
export function triggerKeyDownEvent(element: DebugElement, which: number, key = ''): void {
element.triggerEventHandler('keydown', {
which: which,
key: key,
preventDefault: () => { },
});
}