我有一个组件,里面有一个下拉菜单。当它改变时,会触发一个事件,该事件会通过数组过滤来获取基于事件值的selectedProduct。
我的代码如下:
产品对象是一个对象:
我的代码如下:
public onProductChanged(event): void {
this.selectedProduct = this.products.find((product: Products) => product.id == event.target.value);
}
我的选择下拉菜单:
<select id="product" (change)="onProductChanged($event)">
<option>--- Please Select ---</option>
<option *ngFor="let product of products" [value]="product.id"> {{ product.displayName }} </option>
</select>
产品对象是一个对象:
{ "id": 1, "name": "name_here", "displayName": "Name Here" }
一切都可以正常运作,但我想在我的组件测试中测试更改选择值是否会触发事件并检索正确的值。
我的测试代码如下:
describe('Product selection', () => {
it('should select product', () => {
expect(component.selectedProduct).toBeUndefined();
productSelectElement.nativeElement.value = 'Product Name';
productSelectElement.nativeElement.dispatchEvent(new Event('change'));
fixture.detectChanges();
expect(component.onProductChanged).toHaveBeenCalled();
expect(component.selectedProduct).toEqual({ "id": 1, "name": "product_name", "displayName": "Product Name" });
});
});
productChanged事件已被调用,测试通过。然而,我的selectedProduct始终为空。我该如何使用下拉列表中的更改值来触发该事件?
component.onProductChanged('产品名称'); fixture.detectChanges();
,看看它是否仍然返回 null。那么你至少知道它是有效的。如果它仍然返回 null,那么可能是你的产品没有设置好。 - Swoox