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

在Cypress中使用pdf-parse报错:Fs.readFileSync is not a function

解决Cypress中使用pdf-parse出现"Fs.readFileSync is not a function"的问题

错误原因

pdf-parse是为Node.js环境开发的库,依赖Node.js的fs核心模块。但Cypress的测试代码默认运行在浏览器环境中,浏览器没有fs模块,直接在测试代码中引入pdf-parse就会触发这个错误。

解决方案:用Cypress任务(Task)在Node.js环境解析PDF

Cypress的任务(task)运行在Node.js环境,可以访问fs模块,适合处理这类需要Node.js API的操作。

步骤1:配置Cypress任务

在cypress.config.js中添加解析PDF的任务:

const { defineConfig } = require("cypress");
const pdfParse = require('pdf-parse');
const fs = require('fs');

module.exports = defineConfig({
  e2e: {
    setupNodeEvents(on, config) {
      // 添加解析PDF的任务
      on('task', {
        async parsePdf(filePath) {
          const dataBuffer = fs.readFileSync(filePath);
          const pdfData = await pdfParse(dataBuffer);
          return pdfData;
        }
      });
    },
  },
});

步骤2:修改测试代码调用任务

移除测试代码中的import PdfParse from 'pdf-parse';,改用cy.task调用上面定义的任务:

/// <reference types="Cypress" />

import Loader from './loader.js';
import Login from './login.js'
import PageActions from './pageActions.js';
import Validations from './validations.js';

describe('', () => {
    const login = new Login()
    const loader = new Loader()
    const pageActions = new PageActions()
    const validations = new Validations()

    it('', () => {
        cy.visit('/')
        login.userName()
        login.password();
        login.clickSignIn()
        loader.waitForLoaderToFinish()
        pageActions.clickView();
        loader.waitForLoaderToFinish();
        pageActions.clickLibrary();
        loader.waitForLoaderToFinish()
        pageActions.clickDownload();
        loader.waitForLoaderToFinish();
        validations.validatePDFHasBeenDownloaded();

        // 调用task解析PDF
        cy.task('parsePdf', './cypress/downloads/Application Form.pdf').then(pdfData => {
            cy.log(pdfData.text); // 打印PDF文本内容
            // 添加验证逻辑,比如检查文本是否包含特定内容
            expect(pdfData.text).to.include('预期的文本内容');
        });
    });
})

替代方案:使用专门的Cypress PDF库

可以使用cypress-pdf库,它封装了PDF解析逻辑,更适合Cypress场景:

  1. 安装库:
npm install cypress-pdf --save-dev
  1. 在cypress/support/e2e.js中引入:
require('cypress-pdf');
  1. 测试中直接使用:
cy.readPdf('./cypress/downloads/Application Form.pdf').then(pdf => {
    expect(pdf.text).to.include('目标文本');
});

额外注意点

  • 原代码中Actions.clickLibrary();需修正为pageActions.clickLibrary();,保证变量名一致性。
  • 确保下载的PDF路径正确,Cypress默认下载目录是cypress/downloads,如有自定义路径需同步调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:23:13