angular - 在 Angular 7 DOM 测试中未触发更改事件
问题描述
我正在尝试对这个简单的组件进行 DOM 测试:
我正在尝试检查 (change) 是否触发了 onChange,因此我需要触发change
.
很简单,对吧?错误的。
我尝试使用 Angular 函数和本机 DOM API,但我仍然无法以编程方式触发该函数。
这是我的测试:
it('should emit filter events', () => {
spyOn(component, 'onChange');
const input = fixture.debugElement.nativeElement.querySelector('input');
input.dispatchEvent(new Event('change', {target: {value: 'Building UUID'}}))
fixture.detectChanges()
fixture.whenStable().then(() => {
expect(component.onChange).toHaveBeenCalled()
});
});
<div>
<input
#input
type="text"
(change)="onChange"
placeholder="Search by DeviceID or building"
/>
<a class="reset" (click)="onReset()"></a>
</div>
解决方案
尝试使用fakeAsync
it('should emit filter events', fakeAsync(() => {
const spyOnChange = spyOn(component, 'onChange');
const input = fixture.debugElement.nativeElement.querySelector('input');
input.dispatchEvent(new Event('change', {target: {value: 'Building UUID'}}))
tick();
fixture.detectChanges();
expect(spyOnChange).toHaveBeenCalled()
}));
推荐阅读
- objective-c - 在 myproject-swift.h 中找不到接口声明
- django - Django表单未在模板中呈现输入字段
- postgresql - 如何更新postgresql中的jsonb列,它只是一个值数组,没有键
- mysql - 如何获取列数
- ios - iOS 中的 kCMTimeIndefinite 是什么?
- android - 如何在 viewpager 中添加片段和活动,以便片段出现在滑动时?
- c# - 如何修复异常“请求 System.Security.Permissions.EnvironmentPermission ... 类型的权限失败”
- javascript - 即使在使用 javascript 在 wordpress 中单击 Ok 后,如何停止进入下一个 POP 框?
- ios - iOS - 在后台模式下不扫描 BLE 外围设备
- c# - Close() 方法调用 WPF C# 时不关闭窗口