Wie erzwinge ich eine Umgebungsvariable innerhalb von phpunit test auf einen bestimmten Wert?

Lesezeit: 2 Minuten

Benutzeravatar von k0pernikus
k0pernikus

In meiner phpunit habe ich diese Konfiguration:

<php>
    <env name="ENVIRONMENT" value="test"/>
</php>

Ich habe unter der falschen Annahme gearbeitet, dass es die Umgebungsvariable immer auf den Wert setzen würde test. Wenn das System jedoch bereits über den Variablensatz verfügt, bevorzugt es den bereits vorhandenen Wert.

$ export ENVIRONMENT=GNARF
$ phpunit -c test/phpunit.xml

Also innerhalb der Tests der Wert von env('ENVIRONMENT') wird sein "GNARF" obwohl ich erwartet hatte "test".

Gibt es eine Möglichkeit, phpunit dazu zu bringen, die env Einstellung nicht als Standard, sondern als den endgültigen Wert, den es verwenden sollte?

Ich möchte auch vermeiden, phpunit auf eine bestimmte Weise aufzurufen, nur um die richtigen env-Variablen zu erhalten.

Also während das funktioniert:

ENVIRONMENT="test";./vendor/bin/phpunit -c tests/phpunit.xml

Ich konfiguriere es lieber innerhalb der phpunit.xml Datei wenn möglich.

  • Der Wert wird auch ignoriert, wenn die Tests mit PhpStorm ausgeführt werden. (Getestet mit PHP 5.6.24 und PHPUnit 5.7.0)

    – Scheitel

    21. September 2018 um 14:41 Uhr


Benutzeravatar von Francesco Casula
Francesco Casula

Dieser Weg hat bei mir funktioniert (getestet mit PHPUnit 6.5):

<phpunit bootstrap="vendor/autoload.php">
    <testsuites>
        <testsuite name="MyProject">
            <directory>tests</directory>
        </testsuite>
    </testsuites>
    <php>
        <env name="API_KEY" value="fakeApiKey" force="true" />
    </php>
</phpunit>

Hier ist die Pull-Anfrage wo sie diese neue Funktion hinzugefügt haben (falls Sie interessiert sind).

Sebastianbergmann hat dies am 4. Juli 2017 zum Meilenstein PHPUnit 6.3 hinzugefügt

  • Dies ist für PHPUnit 9.5.10 immer noch relevant.

    – Georgij Iwanow

    4. Dezember 2021 um 10:02 Uhr

Die Umgebungsvariablen werden gesetzt PHPUnit_Util_Configuration::handlePHPConfiguration() und tatsächlich sieht es so aus:

foreach ($configuration['env'] as $name => $value) {
    if (false === getenv($name)) {
        putenv("{$name}={$value}");
    }
    if (!isset($_ENV[$name])) {
        $_ENV[$name] = $value;
    }
}

Wie es scheint, gibt es keine Möglichkeit, diese Prüfung zu umgehen, ohne zuerst die Variable zu deaktivieren. Und wenn Sie schon dabei sind, können Sie ihn auch gleich auf den gewünschten Wert setzen.

  • Deinen letzten Satz verstehe ich nicht: “Und wenn du schon dabei bist, du könntest ihn auch gleich auf den gewünschten Wert setzen.” Was meinst du?

    – k0pernikus

    19. Februar 2016 um 13:51 Uhr

  • Anstatt ENVIRONMENT= Um den Wert zu deaktivieren, damit das XML wirksam wird, würde ich direkt verwenden ENVIRONMENT=testdas ist alles.

    – Fabian Schmengler

    19. Februar 2016 um 16:16 Uhr

  • Ich denke derzeit darüber nach, den von @gontrollez aufgezeigten Bootstrap-Weg zu gehen und sie auf den Wert zu setzen, den ich mag.

    – k0pernikus

    19. Februar 2016 um 16:38 Uhr

Sie können die einstellen env vars von der bootstrap Datei. Die Bootstrap-Datei kann aus der ausgewählt werden phpunit.xml Datei, damit das Ergebnis das ist, wonach Sie suchen.

1444630cookie-checkWie erzwinge ich eine Umgebungsvariable innerhalb von phpunit test auf einen bestimmten Wert?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy