我正在尝试运行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);
答案 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);