我正在运行一个材质对话框组件的jest单元测试,其中我在对话框中的输入元素上有cdkFocusInitial
。这在运行应用程序时非常有效,但是当我在Jest中运行单元测试时,我得到以下错误:
console.warn node_modules/@angular/cdk/bundles/cdk-a11y.umd.js:1861
Element matching '[cdkFocusInitial]' is not focusable. HTMLInputElement {
__zone_symbol__inputfalse: null,
__zone_symbol__blurfalse: null,
__zone_symbol__compositionstartfalse: null,
__zone_symbol__compositionendfalse: null,
__zone_symbol__focusfalse: null,
__zone_symbol__animationstartfalse: null,
[Symbol(SameObject caches)]: [Object: null prototype] { classList: DOMTokenList {} }
}
我尝试在stackblitz中设置jest来重现,但我的组件本质上看起来与官方对话框示例非常相似。我已经克隆了example here,并添加了cdkFocusInitial
。打开对话框时,焦点按预期设置:
我希望你能帮我弄清楚我可以尝试修复/删除此警告。
解决方法
在beforeEach函数中,我模拟console.warning如下:
beforeEach(() => {
// Removes "'[cdkFocusInitial]' is not focusable" warning when running tests
console.warn = jest.fn();
});
2条答案
按热度按时间rsl1atfo1#
您需要模拟调用
isFocusable
的InteractivityChecker
服务。最简单的方法是在TestBed中覆盖isFocusable方法,如下所示:
2ekbmq322#
使用**Spectator**时。您需要从
@angular/cdk/a11y
包中模拟InteractivityChecker
。