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()
        })
    })
})
包含通过单元测试的问题的文件部分:
    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);
Ben*_*jam 11
对我来说,在测试之前设置 env 的最优雅方式是在 package.json 中。
下面是一个适应你自己的 npm test 命令的例子:
"scripts": {
  "test": "mocha -r dotenv/config"
}
主要思想是添加-r dotenv/config。
该方法也适用于dotenv-flow,不要忘记在命令开头添加NODE_ENV=test。
它也适用于nodemon。
我找到了解决方案。我必须通过添加方法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);