dancryer / PHPCI

PHPCI is a free and open source continuous integration tool specifically designed for PHP.
BSD 2-Clause "Simplified" License
2.42k stars 439 forks source link

About correspondence to phpunit 6.0 #1305

Open iti-ohuchi opened 7 years ago

iti-ohuchi commented 7 years ago

Since phpunit 6.0 was released and stabilized, we upgraded from 5.7.Now we are receiving following logs being outputted from phpci.

RUNNING PLUGIN: php_unit
PHPUnit 6.0.7 by Sebastian Bergmann and contributors.
unrecognized option --tap
Exception: No TAP log found, please check the configuration.
PLUGIN: FAILED

As a result of an examination, it seems that the --tap option is no longer available in phpunit 6.0.

Are there any ways to make it work like before without using the --tap option? Also please tell me if there is any schedule where you guys can respond to this issue to phpunit 6.0

merlindiavova commented 7 years ago

any news on this?

underthecocotree commented 7 years ago

Downgrade phpunit on your project composer.json to v5.7

It says in the wiki that if you have phpunit in your projects composer.json it will conflict. It just picks up the projects version instead of the one used by phpci.

So until this is updated you can downgrade phpunit.

ptejada commented 7 years ago

Hello,

Can some test if this pull request works with phpunit 6.0? https://github.com/Block8/PHPCI/pull/1275

It replaces the TAP parser.

iti-ohuchi commented 7 years ago

I have tried the #1275 and it returns the following result.

RUNNING PLUGIN: php_unit
PHPUnit 6.2.3 by Sebastian Bergmann and contributors.
unrecognized option --log-json
Exception: No test executed.
PLUGIN: FAILED

Above is 6.2.3 execution log but even on 6.0, it returns the same result.

For reference I have attached the usable option on phpunit 6.2.3.

$ phpunit --help
PHPUnit 6.2.3 by Sebastian Bergmann and contributors.

Usage: phpunit [options] UnitTest [UnitTest.php]
       phpunit [options] 

Code Coverage Options:

  --coverage-clover     Generate code coverage report in Clover XML format.
  --coverage-crap4j     Generate code coverage report in Crap4J XML format.
  --coverage-html        Generate code coverage report in HTML format.
  --coverage-php        Export PHP_CodeCoverage object to file.
  --coverage-text=      Generate code coverage report in text format.
                              Default: Standard output.
  --coverage-xml         Generate code coverage report in PHPUnit XML format.
  --whitelist            Whitelist  for code coverage analysis.
  --disable-coverage-ignore   Disable annotations for ignoring code coverage.

Logging Options:

  --log-junit           Log test execution in JUnit XML format to file.
  --log-teamcity        Log test execution in TeamCity format to file.
  --testdox-html        Write agile documentation in HTML format to file.
  --testdox-text        Write agile documentation in Text format to file.
  --testdox-xml         Write agile documentation in XML format to file.
  --reverse-list              Print defects in reverse order

Test Selection Options:

  --filter           Filter which tests to run.
  --testsuite       Filter which testsuite to run.
  --group ...                 Only runs tests from the specified group(s).
  --exclude-group ...         Exclude tests from the specified group(s).
  --list-groups               List available test groups.
  --list-suites               List available test suites.
  --test-suffix ...           Only search for test in files with specified
                              suffix(es). Default: Test.php,.phpt

Test Execution Options:

  --dont-report-useless-tests Do not report tests that do not test anything.
  --strict-coverage           Be strict about @covers annotation usage.
  --strict-global-state       Be strict about changes to global state
  --disallow-test-output      Be strict about output during tests.
  --disallow-resource-usage   Be strict about resource usage during small tests.
  --enforce-time-limit        Enforce time limit based on test size.
  --disallow-todo-tests       Disallow @todo-annotated tests.

  --process-isolation         Run each test in a separate PHP process.
  --globals-backup            Backup and restore $GLOBALS for each test.
  --static-backup             Backup and restore static attributes for each test.

  --colors=             Use colors in output ("never", "auto" or "always").
  --columns                Number of columns to use for progress output.
  --columns max               Use maximum number of columns for progress output.
  --stderr                    Write to STDERR instead of STDOUT.
  --stop-on-error             Stop execution upon first error.
  --stop-on-failure           Stop execution upon first error or failure.
  --stop-on-warning           Stop execution upon first warning.
  --stop-on-risky             Stop execution upon first risky test.
  --stop-on-skipped           Stop execution upon first skipped test.
  --stop-on-incomplete        Stop execution upon first incomplete test.
  --fail-on-warning           Treat tests with warnings as failures.
  --fail-on-risky             Treat risky tests as failures.
  -v|--verbose                Output more verbose information.
  --debug                     Display debugging information.

  --loader            TestSuiteLoader implementation to use.
  --repeat             Runs the test(s) repeatedly.
  --teamcity                  Report test execution progress in TeamCity format.
  --testdox                   Report test execution progress in TestDox format.
  --testdox-group             Only include tests from the specified group(s).
  --testdox-exclude-group     Exclude tests from the specified group(s).
  --printer          TestListener implementation to use.

Configuration Options:

  --bootstrap           A "bootstrap" PHP file that is run before the tests.
  -c|--configuration    Read configuration from XML file.
  --no-configuration          Ignore default configuration file (phpunit.xml).
  --no-coverage               Ignore code coverage configuration.
  --no-logging                Ignore logging configuration.
  --no-extensions             Do not load PHPUnit extensions.
  --include-path     Prepend PHP's include_path with given path(s).
  -d key[=value]              Sets a php.ini value.
  --generate-configuration    Generate configuration file with suggested settings.

Miscellaneous Options:

  -h|--help                   Prints this usage information.
  --version                   Prints the version and exits.
  --atleast-version      Checks that version is greater than min and exits.
  --check-version             Check whether PHPUnit is the latest version.
anatolykhelmer commented 7 years ago

Any news on this?

cnizzardini commented 6 years ago

I am going to bump this as well.

ozanhazer commented 6 years ago

OK so I tried to find a solution and stuck at some point, here's the details if anyone is interested.

I've ported the tap printer to phpunit v6: ozanhazer/taplistener

We have two problems there:

  1. phpunit is called with --tap argument hard coded inside the PHPCI's Phpunit plugin which needs to be changed.
  2. Phpunit version information is printed right inside the tap output and no decent fix for that within phpunit or the taplistener plugin. There are possible workarounds though.

Actually these problems are not that big but that the real problem is phpci looks like an abandoned project to me. The build is failing most importantly so even if it's fixed we won't be able to know if we broke anything else.

I'll give up here but here are the details for those who want to fix it:

Removed --tap argument:

Add ozanhazer/taplistener to composer requirements.

Inside \PHPCI\Plugin\PhpUnit::runDir and \PHPCI\Plugin\PhpUnit::runConfigFile methods:

if phpunit version >= 6 use --printer Erelyr\\\\TapListener instead of --tap

Incorrect tap data

I think the best approach would be solving this inside PHPCI, displaying a warning about the undefined lines instead of failing. See \PHPCI\Plugin\Util\TapParser::parseLine method.

Removing the version information within the tap listener is not possible, will need kinda hacking which would be fragile. Before phpunit 6 it was hardcoded inside PHPUnit\TextUI\TestRunner, like "don't print version information if printer is TapListener".

bolechen commented 5 years ago

Any news on this? is 2018 now

boajer commented 5 years ago

Welcome to 2019, any news ?