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

在Cypress中使用parse-pdf时出现fs.readFileSync is not a function错误

解决Cypress中调用fs.readFileSync出现「fs.readFileSync is not a function」的问题

问题原因

Cypress的测试代码默认运行在浏览器上下文,而fs是Node.js专属的原生文件系统模块,浏览器环境没有该模块的实现,直接调用就会抛出这个错误。

两种可行解决方案

方案一:用Cypress内置命令cy.readFile()替代

Cypress提供了专门的文件读取命令,无需依赖Node.js的fs模块,适合读取文件后结合parse-pdf处理:

// 以二进制格式读取PDF文件
cy.readFile('path/to/your/target.pdf', 'binary').then(pdfBinary => {
  // 将二进制内容转为buffer,传给parse-pdf解析
  const pdfBuffer = Buffer.from(pdfBinary, 'binary');
  parsePdf(pdfBuffer).then(parsedData => {
    // 在这里处理解析后的PDF数据
    console.log(parsedData);
  });
});

方案二:通过Cypress Task在Node.js环境执行代码

如果必须依赖Node.js的fs模块,可通过Cypress的task机制,在Node.js上下文执行文件读取和PDF解析逻辑:

  1. 修改cypress.config.js,注册自定义task:
const { defineConfig } = require("cypress");
const parsePdf = require('parse-pdf');

module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      on('task', {
        async parsePdfWithFs(filePath) {
          const fs = require('fs');
          // 读取PDF文件buffer
          const pdfBuffer = fs.readFileSync(filePath);
          // 调用parse-pdf解析
          return await parsePdf(pdfBuffer);
        }
      });
    },
  },
});
  1. 在测试代码中调用该task:
cy.task('parsePdfWithFs', 'path/to/your/target.pdf').then(parsedPdfData => {
  // 处理解析后的PDF数据,比如断言内容
  expect(parsedPdfData.pages[0].text).to.include('目标文本');
});

注意事项

  • 文件路径请使用相对于项目根目录的路径,或直接传入绝对路径
  • 确保parse-pdf包已正确安装,版本兼容当前Cypress版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:28:21