在NX工作空间中,我有一个正在使用Cypress测试的应用程序

在嵌套在子文件夹中的一个规格文件中,如下所示

${PROJECT_FOLDER}/apps/${APP_NAME}/cypress/e2e/${SOME_FOLDER}/test.cy.ts

我想获取文件夹(dist)的绝对路径,该文件夹是项目文件夹的子文件夹

${PROJECT_FOLDER}/dist

如何在Test.cy.ts文件中获取到${PROJECT_FOLDER}/dist的绝对路径?

我try 使用__dirname,但它给了我cypress/e2e/${SOME_FOLDER}/

我想将此路径传递到具有如下测试.cy.ts文件的Cypress task

// Test.cy.ts

 const filePath = 'path-to-file in ${PROJECT_FOLDER}/dist/some-file';
 cy.task('fileExists', filePath).should('equal', true);

cypress.config.ts个文件中的Cypress任务

setupNodeEvents(on, _config) {
  on('task', {
    fileExists(filePath: string) {
      return fs.existsSync(filePath);
    },
  })
},

推荐答案

确切的代码取决于您如何设置nx工作空间,但关键是任务内的__dirname是绝对路径,而浏览器中的__dirname是相对路径(由于沙箱安全性).

如果添加任务,可以将相对路径转换为绝对路径

  setupNodeEvents(on, config) {
    on('task', {
      absolutePath(relativePath) {
        const absolutePath = path.join(__dirname, '../../', relativePath)
        return absolutePath;
      },
    })

Notes

  • Windows路径,使用\\分隔符,Linux路径使用/分隔符
  • 假设cypress.config.ts位于PROJECT_FOLDER/apps/APP_NAME中,否则调整../../以适应其位置.
cy.task('absolutePath', '/dist/example.json')
  .then(absolutePath => {
    assert(absolutePath === `${PROJECT_FOLDER}\\dist\\example.json`, 'absolutePath is correct')
  })

enter image description here


因此,您的测试可以通过一条相对于PROSYS_FOLDER的路径,并让任务构建绝对路径.

const relativePath = '/dist/example.json';
cy.task('fileExists', relativePath).should('equal', true)
setupNodeEvents(on, _config) {
  on('task', {
    fileExists(relativePath) {
      const absolutePath = path.join(__dirname, '../../', relativePath)
      return fs.existsSync(absolutePath);
    },
  })
}

Node.js相关问答推荐

在Android Studio中react 本机构建失败:未正确检测到Node.js版本

对于具有重叠列的组合键,在冲突&q;上没有唯一或排除约束匹配错误

如何创建具有不同对象类型的数组类型

AWS ECS 服务发现 Cors 问题?

kubernetes 上的 nextjs 无法启动

将环境变量从 GitHub 操作传递到 json

如何解决 npm install react-select failure with error : An unknown git error occurred, git@github.com :Permission denied (publickey)

Node.js |如何在微服务之间转发标头?

Mongoose-更新嵌套数组

如何让我的 Next.js 应用在运行 ubuntu-latest 的 Azure 应用服务中启动?

使用restify时如何支持cors

在 PassportJS 中使用多种本地策略

如何将`yarn.lock`与`package.json`同步?

Puppeteer:如何提交表单?

Node.js -Firebase 服务帐户私钥不会解析

使用 node 的内置调试器判断变量?

node --experimental-modules,请求的模块不提供名为的导出

大型项目的 NodeJS vs Play 框架

Node.js 中的 PHP exit()/die() 类似功能是什么

使用 Node-sass 缩小 CSS