You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:06:07