WordPress / Requests

Requests for PHP is a humble HTTP request library. It simplifies how you interact with other sites and takes away all your worries.
https://requests.ryanmccue.info/
Other
3.57k stars 494 forks source link

Tests: Streamline running of tests against all PHPUnit versions #819

Open schlessera opened 1 year ago

schlessera commented 1 year ago

The PR #817 introduced a new configuration file for PHPUnit 10, separate from the previous configuration file. In order to run tests against PHPUnit 10, you now have to run composer test10 instead of only composer test.

It would be preferable to have only a singular entry point of composer test that is smart enough to run PHPUnit against the right configuration file.

While looking into this, we've found that PHPUnit has a very convenient flag --atleast-version <version> which could be used to run the tests conditionally. So, the idea is to have something like this (simplified):

    "test": [
      "phpunit --atleast-version 10 && phpunit -c phpunit10.xml.dist --no-coverage",
      "phpunit --atleast-version 10 || phpunit --no-coverage"
    ],

That should generally work.

However, we have yet to find a way to combine this with the use of @php to reuse the exact PHP process that Composer is running under. According to the Composer documentation, you cannot combine multiple commands like this:

One limitation of this is that you can not call multiple commands in a row like @php install && @php foo. You must split them up in a JSON array of commands.

This is why PR #817 has separate Composer scripts at this point: composer test & composer test10.

This goes against Composer conventions and requires the user to know details about the test flow and dependencies in order to run the tests.

jrfnl commented 3 months ago

I've had another play with this, but still haven't found a way to handle this gracefully using Composer scripts alone (and I'd prefer not to introduce bash scripts as they are typically not usable cross-OS).

Something like the below doesn't work.

    "test": [
      "phpunit --atleast-version 10 && @test10 || @testlt10"
    ],
    "testlt10": [
      "@php ./vendor/phpunit/phpunit/phpunit --no-coverage"
    ],
    "test10": [
      "@php ./vendor/phpunit/phpunit/phpunit -c phpunit10.xml.dist --no-coverage"
    ],