为什么在 Jest 中将环境变量与未定义进行比较不能按预期工作?
Why does comparing an environment variable against undefined in Jest not work as expected?
虽然在 Jest 中实施一些测试以确保定义了所需的环境变量,但在尝试将环境变量与 undefined
进行比较时,我 运行 进入了一些 st运行ge 行为. @types/node
似乎暗示任何特定的环境变量都是 string | undefined
,但实际上它似乎更复杂。
process.env.TEST_VAR = 'TEST';
console.log(process.env.TEST_VAR); // TEST
console.log(typeof process.env.TEST_VAR); // string
console.log(process.env.TEST_VAR === undefined); // false
console.log(!process.env.TEST_VAR); // false
console.log(process.env.TEST_VAR == undefined); // false
console.log(process.env.TEST_VAR === ''); // false
process.env.TEST_VAR = '';
console.log(process.env.TEST_VAR); //
console.log(typeof process.env.TEST_VAR); // string
console.log(process.env.TEST_VAR === undefined); // false
console.log(!process.env.TEST_VAR); // true
console.log(process.env.TEST_VAR == undefined); // false
console.log(process.env.TEST_VAR === ''); // true
process.env.TEST_VAR = undefined;
console.log(process.env.TEST_VAR); // undefined
console.log(typeof process.env.TEST_VAR); // string
console.log(process.env.TEST_VAR === undefined); // false
console.log(!process.env.TEST_VAR); // false
console.log(process.env.TEST_VAR == undefined); // false
console.log(process.env.TEST_VAR === ''); // false
我知道这可能有点迂腐,但是在我们的特定用例中,变量 empty 和变量 absent[=22] 之间存在差异=]. 运行 node
在命令行上,实际上引用任何未定义的环境变量 returns undefined
。
有谁知道为什么会这样?以及如何真正测试未定义的环境变量与空变量之间的区别?
它是这样定义的:
interface Process extends EventEmitter {
...
env: ProcessEnv;
...
}
interface ProcessEnv extends Dict<string> {
TZ?: string;
}
interface Dict<T> {
[key: string]: T | undefined;
}
同样在你的测试中,你得到了为什么你不能将值与未定义的值进行比较的答案。
console.log(process.env.TEST_VAR); // undefined
console.log(typeof process.env.TEST_VAR); // string
即使你想把 undefined
放在那里,你实际上还是放了 'undefined'
。
将此添加到您的测试中
delete process.env.TEST_VAR;
console.log(process.env.TEST_VAR); // undefined
console.log(typeof process.env.TEST_VAR); // undefined
console.log(process.env.TEST_VAR === undefined); // true
console.log(!process.env.TEST_VAR); // true
console.log(process.env.TEST_VAR == undefined); // true
console.log(process.env.TEST_VAR === ''); // false
这就是你为环境变量设置未定义值的方式
虽然在 Jest 中实施一些测试以确保定义了所需的环境变量,但在尝试将环境变量与 undefined
进行比较时,我 运行 进入了一些 st运行ge 行为. @types/node
似乎暗示任何特定的环境变量都是 string | undefined
,但实际上它似乎更复杂。
process.env.TEST_VAR = 'TEST';
console.log(process.env.TEST_VAR); // TEST
console.log(typeof process.env.TEST_VAR); // string
console.log(process.env.TEST_VAR === undefined); // false
console.log(!process.env.TEST_VAR); // false
console.log(process.env.TEST_VAR == undefined); // false
console.log(process.env.TEST_VAR === ''); // false
process.env.TEST_VAR = '';
console.log(process.env.TEST_VAR); //
console.log(typeof process.env.TEST_VAR); // string
console.log(process.env.TEST_VAR === undefined); // false
console.log(!process.env.TEST_VAR); // true
console.log(process.env.TEST_VAR == undefined); // false
console.log(process.env.TEST_VAR === ''); // true
process.env.TEST_VAR = undefined;
console.log(process.env.TEST_VAR); // undefined
console.log(typeof process.env.TEST_VAR); // string
console.log(process.env.TEST_VAR === undefined); // false
console.log(!process.env.TEST_VAR); // false
console.log(process.env.TEST_VAR == undefined); // false
console.log(process.env.TEST_VAR === ''); // false
我知道这可能有点迂腐,但是在我们的特定用例中,变量 empty 和变量 absent[=22] 之间存在差异=]. 运行 node
在命令行上,实际上引用任何未定义的环境变量 returns undefined
。
有谁知道为什么会这样?以及如何真正测试未定义的环境变量与空变量之间的区别?
它是这样定义的:
interface Process extends EventEmitter {
...
env: ProcessEnv;
...
}
interface ProcessEnv extends Dict<string> {
TZ?: string;
}
interface Dict<T> {
[key: string]: T | undefined;
}
同样在你的测试中,你得到了为什么你不能将值与未定义的值进行比较的答案。
console.log(process.env.TEST_VAR); // undefined
console.log(typeof process.env.TEST_VAR); // string
即使你想把 undefined
放在那里,你实际上还是放了 'undefined'
。
将此添加到您的测试中
delete process.env.TEST_VAR;
console.log(process.env.TEST_VAR); // undefined
console.log(typeof process.env.TEST_VAR); // undefined
console.log(process.env.TEST_VAR === undefined); // true
console.log(!process.env.TEST_VAR); // true
console.log(process.env.TEST_VAR == undefined); // true
console.log(process.env.TEST_VAR === ''); // false
这就是你为环境变量设置未定义值的方式