SAP Spartacus的Lock Focus Directive单元测试实现

简介: SAP Spartacus的Lock Focus Directive单元测试实现

测试用的HTML页面:

image.pngimage.png

这些方法可以全部mock:


image.png


在beforeEach实现里,选取每一组的部分子元素,注入到service.findFocusable的返回结果集里。

image.png



第一组测试:id为a的a标签,tabindex应该被设置为0:


image.png


lockFocus directive的默认配置:



image.png

注意shouldLock的标志位是通过config.lock决定的:


image.png


b标签通过显式传入的lock:true,也将tabindex设置为0,这一点同a标签一样:


image.png


c标签:如果显式地传入lock:false:


image.png


则host元素的tabindex不发生变化,仍然是初始值5:


image.png


在configuration测试里,监控event对象的stopPropagation方法,并且让service的hasFocusableChildren方法返回false.


image.pngimage.png

image.png

显式触发a标签的回车事件:


image.png


注意上图代码,在使用代码触发a标签的keydown.enter事件时,也要将mock过后的event对象传到event handler里去。


根据lockFocus directive的实现,在handleEnter方法里会调用event.stopPropagation:


image.png

如果lock=false,则enter事件触发后,不应该自动被unlock, 单元测试代码:

image.png

原因在于,如果lock=false,shouldLock也为false,因此无法进入下图的IF分支。


image.png


子元素的锁定测试:


image.png


b1,b2, b3应该全部被锁住,tabindex为-1:


image.png


为什么要tick(500)?


只要lock=true,就会自动将autofocus设置为true:


image.png


在view渲染完毕之后,会调用handleFocus:


image.png


handleFocus里会调用setTimeout执行lockFocus方法:


image.png


b4,b5属于non-focusable标签,不应该被lock:


image.png


b4没有href属性,b5是p标签,都不应被锁住。


image.png


如果lock=false,也不应被lock,tabindex不应该为-1:


image.png


如果child具有persisted focus,那么不应再lock:


image.png


d1和d2的定义:


image.png


enter事件触发时,执行unlockFocus方法:


image.png


unlockFocus会将子元素的tabindex设置成0:


image.png


image.png


persist group的测试:


image.png


b1,b2,b3会自动被添加上data-cx-focus-group的属性,值为config里传入的g1:


image.png


b4, b5不是focusable element,所以不应该被设置data-cx-focus-group属性。


image.png


id为a的a标签会在escape时触发service的handleEscape方法:


image.png


如果lock=false,那么escape时没必要unlock:


image.png

相关文章
|
6月前
|
数据库
什么是 SAP ABAP Lock Mode 的 cumulative 特性
什么是 SAP ABAP Lock Mode 的 cumulative 特性
20 0
|
6月前
|
供应链
SAP ABAP 系统中的 Lock Object
SAP ABAP 系统中的 Lock Object
39 0
|
6月前
|
调度 数据库
什么是 SAP Lock 机制中的 Lock Table
什么是 SAP Lock 机制中的 Lock Table
26 0
|
3月前
|
JSON 开发者 数据格式
关于 SAP Spartacus LandingPage2Template 区域的 layout 设计实现
关于 SAP Spartacus LandingPage2Template 区域的 layout 设计实现
24 0
|
3月前
|
搜索推荐 开发者 UED
关于 SAP Spartacus 层的 UI 设计
关于 SAP Spartacus 层的 UI 设计
38 0
|
3月前
|
开发者 UED
SAP Spartacus BREAKPOINT 枚举类型在 Spartacus layout 实现中的作用
SAP Spartacus BREAKPOINT 枚举类型在 Spartacus layout 实现中的作用
23 0
|
6月前
关于 SAP ABAP 里的锁类型 Lock Type
关于 SAP ABAP 里的锁类型 Lock Type
30 0
|
6月前
SAP CRM One Order 锁定模式用的是 Exclusive Lock
SAP CRM One Order 锁定模式用的是 Exclusive Lock
31 0
|
9天前
|
Java 测试技术
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
15 0
|
5天前
|
缓存 自动驾驶 测试技术
如何进行有效的Apollo测试:单元测试和集成测试指南
如何进行有效的Apollo测试:单元测试和集成测试指南
34 13