如何在 Cypress 中使用模块“fs”?

loo*_*e96 18 javascript node.js cypress

我想从本地存储库导入 JSON 数据。

var fs = require('fs');
var data = fs.readFileSync('./profile.json', 'utf8');
console.log(data);

...
Run Code Online (Sandbox Code Playgroud)

然而Cypress出现了这个错误:

在此输入图像描述

这是我的 cypress 项目中的 package.json。

{
  "name": "cypress_test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "npx cypress run",
    "clean-reports": "rm -rf cypress/reports",
    "merge-report": "npx mochawesome-merge --reportDir cypress/reports/separate-reports cypress/reports/full_report.json",
    "generate-report": "npx mochawesome-report-generator --reportDir cypress/reports cypress/reports/full_report.json",
    "after:tests": "npm run merge-report; npm run generate-report",
    "cypress": "npm run clean-reports; npm run test; npm run after:tests"
  },
  "keywords": [],
  "type": "module",
  "author": "",
  "license": "ISC",
  "dependencies": {
    "@cypress/webpack-preprocessor": "^5.4.1",
    "cypress": "^4.11.0",
    "fs": "0.0.1-security",
    "mocha": "5.2.0",
    "mochawesome": "4.1.0",
    "mochawesome-merge": "2.0.1",
    "mochawesome-report-generator": "4.0.1",
    "papaparse": "^5.2.0",
    "selenium-webdriver": "^4.0.0-alpha.7",
    "xlsx": "^0.16.4"
  },
  "devDependencies": {
    "@babel/core": "^7.11.0",
    "@babel/preset-env": "^7.11.0",
    "babel-loader": "^8.1.0",
    "webpack": "^4.44.1"
  }
}

Run Code Online (Sandbox Code Playgroud)

我不想使用 cy.fixture 因为我需要在“it 测试说明”中使用来自 json 的数据。例如,我想做这样的测试。

it (datas.data, ()=>{
   ...
})
Run Code Online (Sandbox Code Playgroud)

Max*_*sel 8

您应该能够profile.json使用 require 语句加载您的文件。

const data = require('profile.json');
Run Code Online (Sandbox Code Playgroud)

  • 应该从相对路径“require()”,否则它会在node_modules中查找。 (2认同)
  • 添加我自己的发现 - 赛普拉斯内的“require”调用似乎发生了某种形式的静态分析。如果 require 参数以字符串文字(包括模板字符串)开头,那么 Cypress 会尝试将所有初始字符串(目录)预加载到内存中。如果它是一个变量(即使是声明为文字字符串的常量变量),那么 Cypress 似乎不会预加载任何内容,并且该模块在浏览器中不可用。 (2认同)