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

集成videojs-cmcd后单元测试报错:videojs__default.default.getPlugin is not a function

解决方案:Video.js + videojs-cmcd 单元测试报错及类型缺失问题

一、解决TypeError: videojs__default.default.getPlugin is not a function测试错误

1. 导入完整的Video.js构建版本

测试环境可能默认导入了精简版Video.js,缺失插件系统相关API,修改导入语句为完整构建包:

import videojs from 'video.js/dist/video.js';

2. 手动模拟Video.js插件API

在测试前置文件(如setupTests.ts)中补全测试环境缺失的方法:

import videojs from 'video.js';

// 模拟插件系统所需的核心方法
if (!videojs.getPlugin) {
  videojs.getPlugin = jest.fn(() => null);
  videojs.registerPlugin = jest.fn();
}

3. Mock videojs-cmcd插件模块

测试时无需加载真实插件逻辑,直接mock整个模块:

// 在测试文件顶部添加
jest.mock('@montevideo-tech/videojs-cmcd', () => jest.fn());

或者在Jest配置文件的moduleNameMapper中配置全局mock:

{
  "moduleNameMapper": {
    "@montevideo-tech/videojs-cmcd": "<rootDir>/__mocks__/videojs-cmcd.js"
  }
}

然后在__mocks__/videojs-cmcd.js中写入:

module.exports = jest.fn();

二、处理videojs-cmcd缺少@types类型定义的问题

1. 创建自定义类型声明文件

在项目src目录下新建types/videojs-cmcd/index.d.ts,添加适配插件的类型定义:

import videojs from 'video.js';

declare module '@montevideo-tech/videojs-cmcd' {
  // 根据插件实际功能补充配置项字段
  export interface CMCDPluginOptions {
    sessionId?: string;
    contentId?: string;
    streamType?: 'v' | 'a' | 'av';
  }

  // 扩展Video.js Player接口,添加cmcd方法
  declare module 'video.js' {
    interface Player {
      cmcd: (options?: CMCDPluginOptions) => void;
    }
  }
}

接着修改tsconfig.json,将自定义类型目录加入typeRoots:

{
  "compilerOptions": {
    "typeRoots": ["./src/types", "./node_modules/@types"]
  }
}

2. 临时忽略类型错误(应急方案)

如果暂时不需要完整类型支持,可在导入插件的行添加注释跳过TS检查:

// @ts-ignore
import '@montevideo-tech/videojs-cmcd';

内容的提问来源于stack exchange,提问作者Mahes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 23:11:04