【问题标题】:Loading a test .env file in jest开玩笑地加载一个测试 .env 文件
【发布时间】:2018-11-30 17:00:17
【问题描述】:

我正在尝试使用本地 .env 文件对带有 jest 的 react 项目运行快照测试,但我不知道如何让 jest 识别它。

到目前为止我已经尝试过:

  • 在 jest.setup.js 中添加 dotenv.config({path: 'path/to/.env'});
  • 在 cli 添加中使用 -env='path/to/.env' 运行玩笑
  • testEnvironment: jest.config.js 中的'path/to/.env'

是否支持此功能?任何帮助将不胜感激

【问题讨论】:

    标签: reactjs jestjs


    【解决方案1】:

    我目前做的是这样的:

    beforeEach(()=> {
        process.env = Object.assign(process.env, { REACT_APP_ENV_VAR: 'some env variable' });
    });
    

    这样,我可以选择每次测试使用什么变量,别忘了清理afterEach上的env

    【讨论】:

    • jest 为初始组件正确加载了 env 变量,但是我的组件有几个嵌套组件,它们仍然保留默认的 env 值。
    • 不幸的是,如果使用 API 密钥,这种方法会将其放入您的测试文件中,这是不好的。我想可能会添加乱码,但这可能会影响其他测试。
    【解决方案2】:

    将 Jest 测试所需的环境变量放在 .env.test 中。

    jest doc:

    Jest sets the following environment variables:
    
    NODE_ENV
    Set to 'test' if it's not already set to something else.
    

    因此 .env.test 中的环境变量会被 jest 自动设置。

    【讨论】:

      【解决方案3】:

      在 Linux 上,您可以这样做:

      "scripts": {
        ...
        "test": "export $(xargs < .env) && jest",
        ...
      }
      

      export $(xargs &lt; .env) 部分从.env 文件加载环境值。

      【讨论】:

        【解决方案4】:

        .env 配置适用于您的应用程序,而不是您的测试。

        例如,如果您想根据env为您的应用程序中的变量设置不同的值,它将是这样的

        development.env

        GREET="Hello Dev!"
        

        test.env

        GREET="Hello Master!"
        

        生产环境

        GREET="Hello User!"
        

        现在您在应用程序中的代码将是

        const sendGreeting = () => {
          return process.env.GREET || 'default greet';
        };
        

        您应该使用在您的package.json 文件中将NODE_ENV 设置为test 的脚本来运行测试

        "scripts": {
          ...
          "test": "NODE_ENV=test jest"
          ...
        }
        

        因此,当您开玩笑地测试此方法时,您将获得正确的测试环境值。

        describe('Test Env', () => {
          it('should return test greeting in test env', () => {
            expect(sendGreetings()).toEqual("Hello Master!");
          });
        });
        

        【讨论】:

        • 这个方法对我不起作用。尝试测试环境变量时,jest 返回空。我使用了 cross-env NODE_ENV=test,因为普通的 NODE_ENV=test 只会抛出错误
        • 为什么在运行测试时需要环境变量?
        • 我们根据用户设置(如语言等)在网站上有不同的文件(如图像)。我想通过更改 .env 中的值来为每个设置运行快照测试文件。
        猜你喜欢
        • 1970-01-01
        • 2018-09-25
        • 2020-05-26
        • 1970-01-01
        • 2019-11-10
        • 2019-09-18
        • 1970-01-01
        • 2020-02-06
        • 2020-03-25
        相关资源
        最近更新 更多