是否可以从 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 加载我所有的环境变量。这涉及通过 webpack 运行所有单元测试并且工作正常。
但是,从阅读 documentation Jest 不通过 webpack 运行测试;相反,模块是通过 moduleNameMapper 模拟出来的。这适用于其他一切,但我无法加载 env 文件变量。到目前为止,我已经尝试将 setupFiles 选项用于调用 dotenv.config 的 js 文件,并使用给它的 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';
最佳答案
这些都不适合我,但我在 configuring dotenv by default in Jest 上找到了一篇很棒的文章在 package.json 中:
{
"scripts": {
"test": "jest --setupFiles dotenv/config"
}
}
关于javascript - 使用 .env 文件对 jest 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50259025/