如何在Ionic 5中对Capacitor插件函数调用进行单元测试
报错原因
Error: "Keyboard" plugin is not implemented on web
该报错的本质是测试运行在Web环境时,@capacitor/keyboard原生插件没有提供Web端的实现,调用原生方法就会抛出异常。你已经完成了platform的mock可以触发iOS分支,但没有对Keyboard插件本身做模拟,所以会触发报错。
解决方案
方案1:测试侧mock Keyboard插件(推荐,不改动业务代码)
在你的单测文件中,提前mock @capacitor/keyboard 模块的hide方法,示例以Jest/Vitest为例:
// 测试文件顶部,导入业务代码前先mock插件 jest.mock('@capacitor/keyboard', () => ({ Keyboard: { hide: jest.fn() } }))
mock完成后你还可以额外添加断言验证方法调用逻辑是否符合预期:
// 触发dismissModal方法,且当前模拟为iOS平台的场景下 import { Keyboard } from '@capacitor/keyboard'; expect(Keyboard.hide).toHaveBeenCalledTimes(1);
方案2:业务代码增加环境兼容判断(适合线上Web环境也需要运行的场景)
引入Capacitor核心类,调用插件前先判断插件在当前环境是否可用,从根源避免报错:
import { Capacitor } from '@capacitor/core'; dismissModal() { if (this.platform.is('ios')) { // 新增插件可用性判断 if (Capacitor.isPluginAvailable('Keyboard')) { Keyboard.hide(); } this.modalController.dismiss(); } else { this.modalController.dismiss(); } }
内容的提问来源于stack exchange,提问作者Mvram
相关产品推荐
相关产品推荐

