【发布时间】:2022-01-09 11:15:20
【问题描述】:
我知道我可以做 process.env.NODE_ENV = TEST 但它不适合我。相关代码如下:
test.js
import server from "../../src/index.js";
process.env.NODE_ENV = "test";
console.log(process.env.NODE_ENV); // returns "test"
chai.use(chaiHttp);
// calls server here with chai-http
src/index.js
import express from "express";
import dotenv from "dotenv";
dotenv.config();
const app = express();
// Some API endpoint here that calls getUserFromUserId
app.listen(port, () => {
logger.info(`App running on http://localhost:${port}`);
});
export default app;
user.js
console.log(process.env.NODE_ENV) // returns undefined
process.env.NODE_ENV = "test" // manually sets it here again
console.log(process.env.NODE_ENV) // returns test correcly this time
所以这里的问题是,当我运行 test.js 时,我正在导入,因此在设置我的 NODE_ENV 之前运行 user.js。由于进口被提升,我也不能更早地带来 env 设置。但是,我需要 user.js 在测试时表现不同,因此我需要在运行 user.js 代码之前设置 NODE_ENV。我怎样才能做到这一点?
编辑: 我尝试将我的测试脚本更改为“测试:SET NODE_ENV=test && mocha”。 这似乎设置了节点环境,但我仍然面临问题。
user.js
console.log(process.env.NODE_ENV); // returns test
console.log(process.env.NODE_ENV === "test"); // returns false
process.env.NODE_ENV = "test";
console.log(process.env.NODE_ENV); // returns test
console.log(process.env.NODE_ENV === "test"); // returns true
不知何故 2 '测试'是不同的?还有一个问题是 SET 是特定于 Windows 的。
【问题讨论】:
-
看起来您忘记在示例中添加
user.jsimport。您可以尝试运行传递 env 变量的节点进程,例如NODE_ENV=test node ./test.js。或者使用 require 而不是 import -
我没有将它包含在我的代码 sn-p 中,因为我没有直接导入 user.js,我正在导入一些路由函数,该函数正在导入从服务目录导入 user.js 的控制器函数,但该导入已得到处理。
-
我可以在我的脚本中执行 SET NODE_ENV=test 但我想知道是否还有其他方法。如果可以的话,我更愿意避免 require (这样我所有的 import 语句都可以保持一致)。
-
我想您需要包装所有这些代码,并将
NODE_ENV设置为一个函数并在需要的地方调用它。这样你就不会依赖 pon 进口订单等等 -
@maksimr 在我尝试在脚本调用中设置 NODE_ENV 后查看上面的编辑。
标签: javascript node.js testing environment-variables