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

时间:2017-05-06 00:19:10

标签: javascript node.js unit-testing mocha

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

test.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()
        })
    })
})

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

    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);

2 个答案:

答案 0 :(得分:5)

对我来说,在测试前设置环境的最优雅的方法是 package.json内

以下是适应您自己的npm测试命令的示例:

"scripts": {
  "test": "mocha -r dotenv/config"
}

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

该方法与 dotenv-flow 一起使用也很好,请不要忘记在命令开头添加 NODE_ENV = test

它与 nodemon 一起使用也很好。

答案 1 :(得分:2)

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

示例:

        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);