ionic-framework - 如何在测试中模拟 ionBlur
问题描述
也许我会从我想要实现的目标开始:我有一个带有必填字段的表单。默认情况下,它不应该显示任何错误。如果用户触摸该字段,则应显示错误。所以我的领域看起来或多或少是这样的:
<ion-input .... (ionBlur)="updateDispayedErrors()"></ion-input>
但我不知道如何测试它,因为:
- 运行
fixture.debugElement.nativeElement.blur()
不会触发ionBlur
处理程序(与 相同....dispatchEvent(new Event('blur'))
) - 普通角度
(blur)
不起作用(即,如果我将代码更改为(blur)="updateDisplayErrors()"
然后它不起作用) - 似乎在浏览器中创建的
blur()
本机元素上调用方法<input .../>
会起作用但是......问题是当我运行测试时fixture.debugElement.nativeElement.childNodes
是空的......所以<input .../>
没有创建本机
如果您想看一个完整的例子来说明它,请告诉我。
解决方案
如果您添加一个选择器来ion-input
喜欢:
<ion-input .... (ionBlur)="updateDisplayedErrors()" id="specialInput"></ion-input>
然后你可以使用fixture.debugElement.triggerEventHandler
:
import { By } from '@angular/platform-browser';
...
it('should emit ionBlur', () => {
const ionDe = fixture.debugElement.query(By.css('#specialInput'));
const ionBlurResult = spyOn(component, 'updateDisplayedErrors');
ionDe.triggerEventHandler('ionBlur', {});
expect(ionBlurResult).toHaveBeenCalled();
});
推荐阅读
- javascript - 将固定位置放在相对位置内时如何工作
- c# - 如何从 Xamarin Forms App 发送打印到 Epson EM T82 POS 打印机?
- ios - iOS 应用程序安装形式 TestFlight 的行为不同于直接从 Xcode 安装的应用程序
- eclipse - gitignore 无法忽略某些目录下的文件
- android - 有没有一种方法可以在 android 编程中获取更改的联系人姓名而不是 CallLogs 中的缓存名称
- codeigniter - 如何在codeIgniter中使用ajax传递Controller方法
- email - Google App Engine 使用代码 308 响应
- android - Cordova 没有将 android 应用程序启动到模拟器
- ios - 在 swift 5 中使用 @dynamicCallable 有什么需要?
- python-3.x - Python Postgres插入错误:TypeError:字符串格式化期间并非所有参数都转换