在 Mocha 单元测试 Node.js 期间找不到环境变量

s_k*_*les 9 javascript unit-testing mocha.js node.js

我正在尝试运行 mocha 单元测试,但我正在测试的模块使用的模块之一需要环境变量,例如 process.env.CLIENT_ID 到 dotenv。当我运行 Mocha 测试时,找不到这些环境变量。如何在我的 mocha 单元测试中包含 .env 文件中的环境变量?

测试.js:

    var messenger = require(__dirname + "/../routes/messenger.js");
var assert = require("assert") 


describe("Return Hello", function(){
    it('Should return hello',function(done){
        messenger.testFunction(function(value){
            assert(value === "Hello", 'Should return Hello')
            done()
        })
    })
})
Run Code Online (Sandbox Code Playgroud)

包含通过单元测试的问题的文件部分:

    var express = require("express")
var router = express.Router();

require('dotenv').config()

var plaid = require('plaid');
var mysql = require('mysql');

var fs = require("fs");


const plaidClient = new plaid.Client(
    process.env.PLAID_CLIENT_ID, // these are all not found
    process.env.PLAID_SECRET,
    process.env.PLAID_PUBLIC_KEY,
    plaid.environments.sandbox);
Run Code Online (Sandbox Code Playgroud)

Ben*_*jam 11

对我来说,在测试之前设置 env 的最优雅方式是在 package.json 中

下面是一个适应你自己的 npm test 命令的例子:

"scripts": {
  "test": "mocha -r dotenv/config"
}
Run Code Online (Sandbox Code Playgroud)

主要思想是添加-r dotenv/config

该方法也适用于dotenv-flow,不要忘记在命令开头添加NODE_ENV=test

它也适用于nodemon


s_k*_*les 6

我找到了解决方案。我必须通过添加方法path:的选项将 dotenv 配置显式链接到 .env 文件的位置.config()

例子:

        var envPath = __dirname + "/../.env"
    require('dotenv').config({path:envPath})

// ^ this was incorrect

    var express = require("express")
    var router = express.Router();

    var plaid = require('plaid');
    var mysql = require('mysql');

    var fs = require("fs");


    const plaidClient = new plaid.Client(
        process.env.PLAID_CLIENT_ID,
        process.env.PLAID_SECRET,
        process.env.PLAID_PUBLIC_KEY,
        plaid.environments.sandbox);
Run Code Online (Sandbox Code Playgroud)