开玩笑测试不使用 dotenv 读取环境变量

asm*_*sma 2 node.js jestjs dotenv

我正在对一个调用环境变量的函数运行测试,但未定义。我尝试过但不起作用的解决方案:

1/添加require('dotenv').config({path:'../.env'})到我的测试文件中

2/ 在 package.json 中传递全局变量

"jest": {
    "globals": {
      "USER_ENDPOINT":"xxx",
      "USER_KEY":"xxx"
  }
}
Run Code Online (Sandbox Code Playgroud)

3/在package.json中的测试命令中传递我的变量

"test": "USER_ENDPOINT:xxx USER_KEY:xxx jest --watchAll --detectOpenHandles"
Run Code Online (Sandbox Code Playgroud)

4/ 在我的测试文件中的 beforeEach() 中添加了一个 Object.assign

beforeEach(() => {
        process.env = Object.assign(process.env, {USER_ENDPOINT:"xxx", USER_KEY:"xxx" });
});
Run Code Online (Sandbox Code Playgroud)

并收到错误“Jest 遇到意外令牌”

5/我在根目录下创建了一个 jest.config.js 文件

require('dotenv').config({path:'./.env'});
module.exports = {
    globals: {
        USER_ENDPOINT:"xxx", 
        USER_KEY:"xxx"
    }
};
Run Code Online (Sandbox Code Playgroud)

大多数这些解决方案都在这里建议: https: //github.com/vuejs/vue-test-utils/issues/193 ,但都不起作用

sli*_*wp2 6

它按预期使用dotenv包加载环境变量。

\n\n

例如

\n\n

index.test.js

\n\n
const path = require(\'path\');\n\nrequire(\'dotenv\').config({ path: path.resolve(__dirname, \'./.env\') });\n\ndescribe(\'61781150\', () => {\n  it(\'should pass\', () => {\n    expect(process.env.USER_ENDPOINT).toBe(\'http://localhost:3000\');\n    expect(process.env.USER_KEY).toBe(\'abc123\');\n  });\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

.env

\n\n
USER_ENDPOINT=http://localhost:3000\nUSER_KEY=abc123\n
Run Code Online (Sandbox Code Playgroud)\n\n

.env您很可能需要通过该方法获取文件的路径path.resolve

\n\n

单元测试结果:

\n\n
 PASS  stackoverflow/61781150/index.test.js (8.236s)\n  61781150\n    \xe2\x9c\x93 should pass (2ms)\n\nTest Suites: 1 passed, 1 total\nTests:       1 passed, 1 total\nSnapshots:   0 total\nTime:        9.264s, estimated 11s\n
Run Code Online (Sandbox Code Playgroud)\n