vlucas / phpdotenv

Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.
BSD 3-Clause "New" or "Revised" License
13.09k stars 625 forks source link

Inconsistent result when calling `$this->dotenv->load()` multiple times from PHPUnit #567

Open bilogic opened 4 months ago

bilogic commented 4 months ago

https://gist.github.com/bilogic/4114836067651905888abd542becee55

I have a set of flaky tests in the gist above. What I can't understand is:

  1. If the tests are ran individually, they all pass
  2. If PHPUnit is used to run them all, test_Can_detect_missing_mandatory_environment_keys fails and it is due to $this->dotenv->load(); returning an empty array here https://gist.github.com/bilogic/4114836067651905888abd542becee55#file-envchecker-php-L61
  3. If I re-order test_Can_detect_missing_mandatory_environment_keys as the first test, it passes and now test_Can_parse_environment_file fails due to the same issue of an empty array

Any idea what I'm missing here?

mattsmithies commented 2 months ago

Use createMutable while I would need to dig through the code to fully comprehend the inner workings, it seems that immutability in this instance returns configuration onces but not on "future" usage of "load()".

I'm not sure whether this is by design, hypothetically, you should be able to have multiple immutable configuration at whatever point you want that shouldn't change outside of a particular bound/context.