javascript - 使用 .env 文件对 jest 进行单元测试

标签 javascript unit-testing environment-variables jestjs

是否可以从 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/

相关文章:

python - 在运行 Python 单元测试套件时,您可以将哪些数字作为冗长传递?

python - 当测试在单独的文件夹中时使用 pytest

c++ - 如何完全清除Windows C++中的所有用户环境变量

Linux环境变量已设置但未使用

javascript - Jquery .click() 函数选择器问题

javascript - 从 android webView 打开相机

ruby-on-rails - 我可以用 Spock 做这个吗?

javascript - process.env.NODE_ENV 是否自动设置为 'production' ?

javascript - 一个分区中的所有段落

javascript - 使用 jQuery 创建表 - 追加