jest process.cwd()以获取测试文件目录

8xiog9wr  于 2023-02-14  发布在  Jest
关注(0)|答案(2)|浏览(168)

在我当前的代码中,我使用process.cwd()获取当前工作目录,然后加载一些文件(如config文件)。
下面我将展示我的代码的概念和我如何测试它。
以下是目录结构:

├── index.js
└── test
    ├── index.test.js
    └── config.js
    • 索引. js**
const readRootConfig = function() {
  const dir = process.cwd();
  console.log(dir); // show the working dir
  const config = require(`${dir}/config.js`);
}

然后我用jest来测试这个文件。

    • 索引测试js**
import readRootConfig '../index';

it('test config', () => {
  readRootConfig();
})

运行测试后,dir的console./(实际输出为绝对路径,我在此演示中仅显示相对路径)
但是我希望dir的输出是./test
是否有任何配置使jest使用test file folder作为process.cwd()文件夹?
我认为解决方案之一是将dir path作为参数传递,如下所示:

    • 索引. js**
const readRootConfig = function(dir) {
  console.log(dir); // show the working dir
  const config = require(`${dir}/config.js`);
}

但是我不太喜欢这个解决方案,因为这个方法是为了适应测试。
有什么建议吗?谢谢。

tquggr8v

tquggr8v1#

也许你想做一个模块,知道什么文件需要它,你可以使用module.parent .它是第一个需要这个的模块.然后你可以使用path.dirname得到文件的目录.
所以index.js应该是这样的

const path = require('path')

const readRootConfig = function() {
  const dir = path.dirname(module.parent.filename)
  console.log(dir); // show the working dir
  const config = require(`${dir}/config.js`);
}
amrnrhlw

amrnrhlw2#

__dirname很好地实现了这一点,因为module.parent现在已从节点v19.6.0(www.example.com)弃https://nodejs.org/docs/latest/api/globals.html#__dirname

相关问题