KeyboardEvent 的 Angular 4 单元测试

2023-12-08

我正在尝试为我编写的实用程序编写单元测试,以限制输入字段可用的字符。该方法获取键盘事件并确定已触发哪个 event.code 并返回 true 或 event.preventDefault()。这很有效,但我无法在茉莉花/业力中测试它。

来自模板的当前输入

<input [(ngModel)]="donationValue" formControlName="donationAmount" 
type="tel" class="donation-amount" (keydown)="checkCharacter($event)" 
placeholder="Enter Amount..."/>

这是我当前的测试

it('should return have defaultPrevented as true', fakeAsync(() => {
        const goalInput = 
fixture.debugElement.query(By.css('input.donation-
amount')).nativeElement;
        const keyEventData = { isTrusted: true, code: 'KeyA' };
        const keyEvent = new KeyboardEvent('keydown', keyEventData);
        goalInput.dispatchEvent(keyEvent);
        tick();
        fixture.detectChanges();                
        expect(keyEvent.defaultPrevented).toBe(true);
    }));

我还有其他测试,我已经监视了这些方法,但它们被解雇了。我怀疑 isTrusted 属性设置为 false,即使我试图将其设置为 true。


所以 - 我最终使用的答案是这样的:

it('Should call prevent default', inject([ManageUtils], (manageUtils: ManageUtils) => {
    const keyEvent = new KeyboardEvent('keydown', { code: 'KeyA' });
    const spy = spyOn(keyEvent, 'preventDefault');        
    manageUtils.checkCharacterForProperCurrency(keyEvent);
    fixture.detectChanges();
    expect(spy).toHaveBeenCalled()
}));

it('Should not call prevent default', inject([ManageUtils], (manageUtils: ManageUtils) => {
    const keyEvent = new KeyboardEvent('keydown', { code: 'Digit0' });
    const spy = spyOn(keyEvent, 'preventDefault');        
    manageUtils.checkCharacterForProperCurrency(keyEvent);
    fixture.detectChanges();
    expect(spy).toHaveBeenCalledTimes(0);
}));

正如一位响应者回答的那样,不可能创建真正的 isTrusted 按键事件(根据我读到的内容)。因此,为了测试这一点,我使用了 jasmine 间谍来查看当我将 KeyboardEvent 传递给我构建的实用程序函数时是否调用了 PreventDefault。希望这可以节省某人的时间...我花了一段时间才到达这里!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

KeyboardEvent 的 Angular 4 单元测试 的相关文章

随机推荐

  • 用于处理多个未知回调的 JavaScript 函数

    我有一个场景 我想将 2 个或更多函数 作为参数 发送到处理函数中 并让该处理函数执行每个传递的函数作为前面函数的回调函数 这是我试图编写的函数的一般概念 function functionChain MAKE SURE WE HAVE A
  • 为什么此 DataAdapter 不将行插入数据库?

    因此 我遇到了一种情况 我使用 SqlDataAdapter 将行插入 SQL Server 2014 数据库中的表中 数据来源是 Excel 电子表格 当使用几个 For 循环以及 Columns Add 和 Rows Add 填充 Da
  • PHP Amazon S3通过URL访问私有文件

    我在用着AWS PHPsdk 将图像保存在 S3 上 文件以私密方式保存 然后 我在 Web 应用程序中使用 S3 文件 url 显示图像缩略图 但由于文件是私有的 因此图像显示为损坏 当用户单击文件名时 会打开一个模式以显示较大尺寸的文件
  • kivy自定义小部件绑定错误

    我正在尝试制作一个小俄罗斯方块游戏 用于用 kivy 学习 python 我正在尝试创建一个大小为 20 20 的自定义小部件 当我将其添加到浮动布局并运行以下代码时 我收到以下错误 Error File D OS Files worksp
  • 是否可以动态定义 _Generic 的关联列表?

    我有一个这样的模板 template h Declare a function func type void JOIN func T T t return undef T 我这样使用它来为不同类型生成相同的函数 example c defi
  • 将 powershell 控制台窗口移动到屏幕左侧的最佳方法是什么?

    尝试使用 PowerShell 脚本将当前活动的 powershell 窗口移动到屏幕左侧 我找到了这个功能 但它并没有真正提供任何示例 有趣又有趣的问题 如果你想移动窗口 你需要知道窗口句柄hWnd它的 对于控制台 您可以使用GetCon
  • 当工作表受到保护时,宏不起作用。运行宏返回运行时错误 1004

    我的工作簿中有三个工作正常的宏 但是 当我保护任何工作表时 它们会停止工作 并且我会得到一个run time error 1004 我尝试按照网上找到的两个建议进行操作 在宏代码开始处取消保护 在宏代码结束处保护 仅用户界面 但运行时错误仍
  • 在 Mathematica 中以编程方式创建多元函数

    这是从讨论中分离出来的earlier问题 假设我需要定义一个函数 f 来检查给定的图形标签是否是正确的着色 换句话说 我们为每个节点分配了一个整数 并且没有两个相邻节点得到相同的答案 例如 对于 Path 3 f 1 2 3 返回 True
  • 如何在 php 中设置迭代表的替代行颜色?

    我正在使用 PHP 并且正在迭代一个带有结果数组的表 我想向其中添加行颜色和备用行颜色 如何操作 任何建议 table cellpadding 0 cellspacing 2 width 100 class table Style Bord
  • 从存储过程刷新数据

    我有一个 C 实体框架应用程序 我正在尝试从代码运行存储过程 没问题 运行时间较长 大约 30 分钟 随着流程的进行 我将每个事务的日志写入 SQL 表 我希望从应用程序启动该过程 然后在屏幕上显示登录的最后 10 条记录 可能每 10 秒
  • 远程计算机无法连接到 Visual Studio Web 服务器

    我记得 MS 开发 Cassini 时 我相信他们将其纳入 VS 05 08 所以我认为这是 Cassini Web 服务器问题 我使用 Windows XP 和 Visual Studio 2008 当我想使用多个浏览器和多个操作系统测试
  • 在另一个批处理脚本中调用一个批处理脚本并对第一个脚本返回的值执行操作

    我有一个批处理脚本 first bat 它返回值列表和退出代码 我的任务是在另一个脚本 second bat 中调用此脚本 并仅当第一个脚本的调用未返回错误代码时才对 first bat 返回的值执行操作 我已调用first bat 并将其
  • Eclipse 错误 - 无法完成安装,因为找不到一个或多个必需项目

    昨天我将Android SDK工具更新到22 6 1 更新后 Eclipse显示以下错误 This Android SDK requires Android Developer Toolkit version 22 6 1 or above
  • python argparse store --foo=bar as args.key='foo', args.value='bar'

    我想解析一个具有互斥选项组的命令行 通常 我只会使用 foo bar这会在命名空间中产生 args foo bar 但是 由于所有这些选项都是互斥的 并且我对选项名称和传递给选项的参数都感兴趣 并且我有几个需要提供给下游的选项 所以我真正想
  • 当 Directory.GetFiles() 被拒绝访问时忽略文件夹/文件

    我试图显示在所选目录 以及可选的任何子目录 中找到的所有文件的列表 我遇到的问题是 当 GetFiles 方法遇到它无法访问的文件夹时 它会引发异常并且进程停止 如何忽略此异常 并忽略受保护的文件夹 文件 并继续将可访问的文件添加到列表中
  • 在 Python 3.7 上安装 Python.net 时出错

    我试图让 Python net pythonnet 在 Python 3 7 上工作 但在运行 setup py 时失败并出现以下错误 我假设它与路径行中缺少的条目有关 但我无法对它进行任何引用 它基本上是 Windows 7 上 Pyth
  • 如何更改 JavaScript 中的日期格式[重复]

    这个问题在这里已经有答案了 可能的重复 在 JavaScript 中设置日期格式 我有这个 HTML Start Date
  • JPA继承

    您好 我是 JPA 新手 我无法理解它如何处理继承 我有一个需要在不更改数据库方案的情况下解决的特定问题 但如果您找不到解决方案 我将不胜感激使用不同数据库方案的解决方案建议 欢迎 Hibernate TopLink 解决方案 如果我不清楚
  • 如何正确初始化 QWizard 页面?

    我在将数据从 QWizard 页面发送到下一页时遇到问题 我正在使用一个变量my nameQWizard 对象作为容器 我的方法是 每当我更改 QLineEdit 的文本时Page1 变量my name我的 QWizard 对象发生了变化
  • KeyboardEvent 的 Angular 4 单元测试

    我正在尝试为我编写的实用程序编写单元测试 以限制输入字段可用的字符 该方法获取键盘事件并确定已触发哪个 event code 并返回 true 或 event preventDefault 这很有效 但我无法在茉莉花 业力中测试它 来自模板