5

I have a method, in a class, that only executes its action when NODE_ENV === 'test'.

Here is the test that I set the env to anything to test the failing scenario:

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)
})

Here is the method:

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)
  }
}

The problem is that when the method do it's verification, the value in NODE_ENV wasn't changed at all, it has its initial value (test). If I log the value, after setting it, in test file it's there, only the object can't see this change. In jest it works just fine. How can I set/mock it properly in vitest?

Here you find a StackBlitz with an example scenario: https://stackblitz.com/edit/node-lr72gz?file=test/example.unit.test.ts&view=editor

leal32b
  • 334
  • 2
  • 9

1 Answers1

2

vi.stubEnv and its derivitives

https://vitest.dev/api/vi.html#vi-stubenv