【发布时间】:2018-10-19 21:43:55
【问题描述】:
是否可以从 env 文件加载环境变量以在 Jest 中进行单元测试?我希望像这样对其进行一系列测试:
// unit tests for env file
describe('env', () => {
it('should have a client id', () => {
expect(process.env.CLIENT_ID).toBeDefined();
});
it('should have a client secret', () => {
expect(process.env.CLIENT_SECRET).toBeDefined();
});
it('should have a host', () => {
expect(process.env.HOST).toBeDefined();
});
it('should have a scope', () => {
expect(process.env.SCOPE).toBeDefined();
});
it('should have a response type', () => {
expect(process.env.RESPONSE_TYPE).toBeDefined();
});
it('should have a redirect uri', () => {
expect(process.env.REDIRECT_URI).toBeDefined();
});
});
目前,上述所有测试都将失败,说明变量未定义。最初我使用的是 mocha/chai 设置,它允许我通过使用 dotenv 加载我的所有 env 变量。这涉及通过 webpack 运行所有单元测试并且工作正常。
然而,阅读documentation Jest 并没有通过 webpack 运行测试;相反,模块是通过 moduleNameMapper 模拟出来的。这适用于其他一切,但我无法加载 env 文件变量。到目前为止,我已经尝试对一个调用 dotenv.config 的 js 文件使用 setupFiles 选项,并使用给它的 env 文件的路径,如下所示:
// setup file for jest
const dotenv = require('dotenv');
dotenv.config({ path: './env' });
这不起作用,所以我现在只使用一个 .env.js 文件进行单元测试,并将这个文件传递给 setupFiles 选项。但是,为了可维护性,并使其与 webpack 一起用于生产,我想将它们全部保存在一个文件中。以下是 .env.js 文件如何查找以供参考的摘录
// .env.js extract example
process.env.PORT = 3000;
process.env.HOST = 'localhost';
process.env.CLIENT_ID = 'your client id';
process.env.REDIRECT_URI = 'your callback endpoint';
【问题讨论】:
-
使用 Jest 的 setupFiles 和
dotenv.config(...)是肯定的方法。您使用这种方法遇到的错误是什么?我会仔细检查以确保您的路径正确。我在一个项目中使用dotenv-safe,并在 jest 设置文件中进行初始化,几乎与您所拥有的完全一样。 -
是的,差不多了,谢谢。无法检查您的评论作为答案,所以我刚刚添加了它。
标签: javascript unit-testing environment-variables jestjs