如何在 vitest 中设置/模拟 env 变量(`process.env.NODE_ENV = 'anything'` 仅在测试文件中生效)?

lea*_*32b 6 variables unit-testing environment-variables jestjs vitest

我在类中有一个方法,仅在 时执行其操作NODE_ENV === 'test'

env这是我将其设置为任何内容以测试失败场景的测试:

it('returns Left on clearDatabase when not in test environment', async () => {
  const { sut } = await makeSut()
  process.env.NODE_ENV = 'any_environment'
  
  const result = await sut.clearDatabase()
  process.env.NODE_ENV = 'test'

  expect(result.isLeft()).toBe(true)
})
Run Code Online (Sandbox Code Playgroud)

方法如下:

async clearDatabase (): Promise<Either<Error, void>> {
  if (process.env.NODE_ENV !== 'test') {
    return left(new Error('Clear database is allowed only in test environment'))
  }

  try {
    const { database } = this.props.dataSource
    await this.mongoClient.db(database).dropDatabase()

    return right()
  } catch (error) {
    return left(error)
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是,当该方法进行验证时, in 中的值NODE_ENV根本没有改变,它有其初始值(test)。如果我记录该值,设置它后,在测试文件中它就在那里,只有对象看不到此更改。开玩笑地说,它工作得很好。我如何在 vitest 中正确设置/模拟它?

在这里您可以找到带有示例场景的 StackBlitz:https://stackblitz.com/edit/node-lr72gz ?file=test/example.unit.test.ts&view=editor