Cypress接入lighthouse插件cy.lighthouse() is not a function报错
问题原因
抛出cy.lighthouse() is not a function错误的核心原因是cypress-audit初始化配置缺失,没有完成插件注册和自定义命令挂载:
- 你仅在plugins配置文件中引入了cypress-audit导出的方法,没有在Cypress的事件钩子中绑定对应逻辑,插件实际并未生效
- cypress-audit的完整配置分为插件端能力注册、支持文件自定义命令挂载两部分,你当前只写了包引入语句,两部分的核心注册逻辑都为空,Cypress运行实例上不会挂载lighthouse相关自定义命令,调用时就会报方法不存在的错误。
修复步骤
按照以下步骤补全配置即可:
1. 补全插件端配置
打开cypress/plugins/index.js文件,替换为如下完整配置,完成插件事件和任务注册:
const { lighthouse, pa11y, prepareAudit } = require("cypress-audit"); module.exports = (on, config) => { // 绑定浏览器启动前的审计初始化钩子 on("before:browser:launch", (browser = {}, launchOptions) => { prepareAudit(launchOptions); // Chromium内核浏览器需要指定调试端口,否则审计能力无法连通 if (browser.family === 'chromium' && browser.name !== 'electron') { launchOptions.args.push('--remote-debugging-port=9222') } return launchOptions }); // 注册审计相关的Cypress任务,供自定义命令调用 on("task", { lighthouse: lighthouse(), pa11y: pa11y(), }); };
2. 补全支持文件的命令挂载
找到项目支持目录下的命令配置文件:
- Cypress 10以下版本:
cypress/support/commands.js - Cypress 10及以上版本:E2E测试对应
cypress/support/e2e.js,组件测试对应cypress/support/component.js
在对应文件顶部加入如下引入语句,把cypress-audit提供的自定义命令挂载到cy实例上:
import "cypress-audit/commands";
3. 重启Cypress验证
配置修改完成后必须完全关闭重启Cypress运行器(插件配置修改不会触发热更新),之后即可正常调用cy.lighthouse()、cy.pa11y()方法。
注意:cypress-audit的Lighthouse能力仅支持Chromium内核浏览器(Chrome、Edge、Electron),在Firefox、Safari下运行会抛出兼容性错误。
内容的提问来源于stack exchange,提问作者Vaibhav Pawar
相关产品推荐
相关产品推荐

