在Nx工作区的Cypress测试文件中获取项目根目录下dist文件夹的绝对路径
在Nx工作区的Cypress测试文件中获取项目根目录下dist文件夹的绝对路径
嘿,我来帮你搞定这个问题!在Nx工作区里,由于Cypress测试文件嵌套在多层子文件夹中,直接用__dirname确实只能拿到当前测试文件所在的文件夹路径,不过有两个可靠的方法可以获取到项目根目录下dist文件夹的绝对路径:
方法一:利用Cypress内置的projectRoot配置(推荐)
Nx在初始化Cypress配置时,已经自动把项目根目录的路径注入到了Cypress的projectRoot配置项中,我们可以直接取用,这是最稳妥的方式,不用担心后续文件夹结构变动导致路径失效。
在你的test.cy.ts中这样写:
// 从Cypress配置中获取项目根目录的绝对路径 const projectRoot = Cypress.config('projectRoot'); // 拼接得到dist文件夹的绝对路径 const distFolderPath = `${projectRoot}/dist`; // 如果要定位dist下的具体文件,直接拼接即可 const targetFilePath = `${distFolderPath}/some-file`; // 传给Cypress task进行检查 cy.task('fileExists', targetFilePath).should('equal', true);
这个方法的优势在于完全依赖Nx和Cypress的内置配置,不需要手动计算层级,非常省心。
方法二:用Node.js的path模块手动回溯路径
如果你不想依赖Cypress的配置,也可以用Node.js的path模块,通过__dirname向上回溯到项目根目录。
首先记得引入path模块(如果你的测试文件是TypeScript,需要确保@types/node已经安装):
import * as path from 'path';
然后在测试文件中计算路径:
// 从当前测试文件所在文件夹,向上回溯到项目根目录 // 路径层级说明:当前文件在 ${PROJECT_FOLDER}/apps/${APP_NAME}/cypress/e2e/${SOME_FOLDER} // 所以需要向上走5级:../../../../../ (从SOME_FOLDER → e2e → cypress → APP_NAME → apps → PROJECT_FOLDER) const projectRoot = path.resolve(__dirname, '../../../../../'); const distFolderPath = path.join(projectRoot, 'dist'); const targetFilePath = path.join(distFolderPath, 'some-file'); cy.task('fileExists', targetFilePath).should('equal', true);
不过这个方法需要你准确计算回溯的层级,如果后续项目文件夹结构有变动,就得手动调整../的数量,所以不如第一种方法灵活。
最后再确认一下你的Cypress task代码,fs.existsSync接收绝对路径是完全没问题的,上面两种方法生成的路径都能正常工作。
备注:内容来源于stack exchange,提问作者Thabo
相关产品推荐
相关产品推荐

