【问题标题】:How do I mock `.env` variables in Jest?如何在 Jest 中模拟“.env”变量?
【发布时间】:2021-10-09 02:51:30
【问题描述】:

我正在尝试模拟导入 @env 的东西,以便我可以测试值的不同组合。但是,我不想更改从@env 读取的现有方法以传入变量。

// env.d.ts
declare module '@env' {
  export const APP_ROUTE_NAME: string;
}

这是我的尝试

import env from '@env';
jest.mock('@env');
describe("Determine initial routes", ()=> {
  it("defaults",()=>{
    // does not work because it is read only
    (env as jest.Mocked<typeof env>).APP_ROUTE_NAME = null
  })
})

【问题讨论】:

  • 根据环境变量测试计算值的逻辑。
  • 对,但同样:这是一个已解决的问题。使用dotenv 并依赖于它完全按照它应该的方式解析值的事实?像这样的库的全部意义在于它坚如磐石,你知道它可以工作,你不需要测试“环境解析”,而是可以专注于测试你自己的代码。跨度>
  • 你认为我正在测试 dotenv。我不是在尝试测试我的配置逻辑。因此,我为什么要嘲笑 env。
  • 有点但没有:为什么要模拟任何东西?只需为 jest 设置一个 单独的 jest.env 文件,并将其作为第一次调用加载到测试文件中,并加载任意数量的其他文件(例如来自 ./testing/environments),如果您需要对 "如果特定的环境变量不同”。
  • 您没有提供@env,只提供了它的类型。

标签: javascript typescript jestjs dotenv


【解决方案1】:

如果您正在测试,您可能不需要关心代码中包含的虚假机密。所以只需手动设置环境变量。你可以说这是global setup file

const isDev = process.env.NODE_ENV !== 'production'

module.exports = async () => {
  if (isDev) {
    process.env.API_KEY = 'xxx'
    process.env.OTHER_STUFF = 'xxx'
  }
}

【讨论】:

    猜你喜欢
    • 2017-03-19
    • 2019-11-13
    • 2021-09-21
    • 2018-12-15
    • 2020-02-23
    • 2021-07-06
    • 2022-08-17
    • 2020-11-01
    • 2020-10-02
    相关资源
    最近更新 更多