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

标签 javascript testing jestjs

在我当前的代码中,我使用 process.cwd() 获取当前工作目录,然后加载一些文件(如配置文件)。

下面我将展示我的代码的概念以及我如何测试它。

这是目录结构:

├── index.js
└── test
    ├── index.test.js
    └── config.js

index.js

const readRootConfig = function() {
  const dir = process.cwd();
  console.log(dir); // show the working dir
  const config = require(`${dir}/config.js`);
}

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

index.test.js

import readRootConfig '../index';

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

运行测试后,dir的console./(实际输出的是绝对路径,我在demo中只显示相对路径)

但是我希望dir的输出是./test.

是否有任何配置可以让 jest 使用 test 文件夹 作为 process.cwd() 文件夹?

我认为解决方案之一是将 dir path 作为参数传递,例如:

index.js

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

但是我不太喜欢这个方案,因为这个方法是为了适应测试。

有什么建议吗?谢谢。

最佳答案

也许你想制作一个模块,可以知道它需要什么文件,你可以使用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`);
}

关于javascript - jest process.cwd() 获取测试文件目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45767664/

相关文章:

javascript - 如何在不使用 eval() 的情况下获得在 Backbone.js 中做不同事情的链接?

java - 我在编写测试驱动程序时遇到了麻烦

reactjs - 使用 jest 和 react-testing-library 测试 react 上下文

typescript - 如何让 Jest 覆盖仅限导出线路?

react-native - 以下文件共享它们的名称;请调整你的 hasteImpl : * <rootDir>\package. json * <rootDir>\sanity\package.json

javascript - 如何以对象表示法调用内部 javascript 函数

Javascript 打印 div 在 Safari 网络浏览器中不起作用

javascript - request.js 中的永久代理 - 如何检查它是否正常工作

android - Robotium中的这些指标参数是什么?

testing - 无效的使用匹配器异常 : Invalid use of argument matchers