robertfausk / behat-panther-extension

Run your behat tests in a headless chrome/firefox - Symfony Panther extension for Behat
https://packagist.org/packages/robertfausk/behat-panther-extension
Other
30 stars 5 forks source link

Should phpunit be a dependency? #13

Open brockfanning opened 1 year ago

brockfanning commented 1 year ago

Hi all, I am right at the beginning of trying this out, but got hit by the same error mentioned in #4. I was just wondering if phpunit should be a dependency, since it seems to be necessary.

robertfausk commented 1 year ago

Hi, first at all: nice, that you give it a try!:)

Can you please provide a minimum example project (in github)? Or at least the result of vendor/bin/behat -vvv and the content of your behat.yml and composer.json?

PS: phpunit is used a dev dependency in this library (robertfausk/behat-panther-extension) which is used just for developing image

brockfanning commented 1 year ago

Hi @robertfausk sure thing, here goes:

composer.json

{
    "require": {
        "robertfausk/behat-panther-extension": "^1.1"
    }
}

behat.yml

default:
  extensions:
    Robertfausk\Behat\PantherExtension: ~
    Behat\MinkExtension:
      base_url: https://example.com/
      javascript_session: javascript_chrome
      sessions:
        default:
          panther: ~
        javascript_chrome:
          panther:
            options:
              browser: 'chrome'
              webServerDir: '%paths.base%/web'

vendor/bin/behat -vvv

PHP Fatal error:  Uncaught Error: Class "PHPUnit\Framework\TestCase" not found in /var/www/html/vendor/symfony/panther/src/PantherTestCase.php:41
Stack trace:
#0 /var/www/html/vendor/composer/ClassLoader.php(582): include()
#1 /var/www/html/vendor/composer/ClassLoader.php(433): Composer\Autoload\{closure}('/var/www/html/v...')
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass('Symfony\\Compone...')
#3 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1042): ReflectionClass->newInstanceArgs(Array)
#4 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1165): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, false)
#5 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1111): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Definition), Array, false)
#6 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1011): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, false)
#7 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1165): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, false)
#8 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1111): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Definition), Array, false)
#9 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1572): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array)
#10 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1067): Symfony\Component\DependencyInjection\ContainerBuilder->callMethod(Object(Behat\Mink\Mink), Array, Array)
#11 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(567): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, false, 'mink')
#12 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1163): Symfony\Component\DependencyInjection\ContainerBuilder->doGet('mink', 1, Array, false)
#13 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1111): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Reference), Array, false)
#14 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1011): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, false)
#15 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1165): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, false)
#16 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1111): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Definition), Array, false)
#17 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1572): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array)
#18 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1067): Symfony\Component\DependencyInjection\ContainerBuilder->callMethod(Object(Behat\Testwork\EventDispatcher\TestworkEventDispatcher), Array, Array)
#19 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1165): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, true)
#20 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1111): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Definition), Array, true)
#21 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1011): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, true)
#22 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1165): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, true)
#23 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1111): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Definition), Array, true)
#24 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1111): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, true)
#25 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1011): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, true)
#26 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(567): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, true, 'cli.command')
#27 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(512): Symfony\Component\DependencyInjection\ContainerBuilder->doGet('cli.command', 1)
#28 /var/www/html/vendor/behat/behat/src/Behat/Testwork/Cli/Application.php(161): Symfony\Component\DependencyInjection\ContainerBuilder->get('cli.command')
#29 /var/www/html/vendor/behat/behat/src/Behat/Testwork/Cli/Application.php(122): Behat\Testwork\Cli\Application->createCommand(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#30 /var/www/html/vendor/symfony/console/Application.php(171): Behat\Testwork\Cli\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#31 /var/www/html/vendor/behat/behat/bin/behat(34): Symfony\Component\Console\Application->run()
#32 /var/www/html/vendor/bin/behat(120): include('/var/www/html/v...')
#33 {main}
  thrown in /var/www/html/vendor/symfony/panther/src/PantherTestCase.php on line 41

Fatal error: Uncaught Error: Class "PHPUnit\Framework\TestCase" not found in /var/www/html/vendor/symfony/panther/src/PantherTestCase.php:41
Stack trace:
#0 /var/www/html/vendor/composer/ClassLoader.php(582): include()
#1 /var/www/html/vendor/composer/ClassLoader.php(433): Composer\Autoload\{closure}('/var/www/html/v...')
#2 [internal function]: Composer\Autoload\ClassLoader->loadClass('Symfony\\Compone...')
#3 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1042): ReflectionClass->newInstanceArgs(Array)
#4 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1165): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, false)
#5 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1111): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Definition), Array, false)
#6 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1011): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, false)
#7 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1165): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, false)
#8 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1111): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Definition), Array, false)
#9 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1572): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array)
#10 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1067): Symfony\Component\DependencyInjection\ContainerBuilder->callMethod(Object(Behat\Mink\Mink), Array, Array)
#11 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(567): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, false, 'mink')
#12 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1163): Symfony\Component\DependencyInjection\ContainerBuilder->doGet('mink', 1, Array, false)
#13 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1111): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Reference), Array, false)
#14 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1011): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, false)
#15 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1165): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, false)
#16 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1111): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Definition), Array, false)
#17 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1572): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array)
#18 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1067): Symfony\Component\DependencyInjection\ContainerBuilder->callMethod(Object(Behat\Testwork\EventDispatcher\TestworkEventDispatcher), Array, Array)
#19 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1165): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, true)
#20 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1111): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Definition), Array, true)
#21 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1011): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, true)
#22 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1165): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, true)
#23 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1111): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Object(Symfony\Component\DependencyInjection\Definition), Array, true)
#24 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1111): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, true)
#25 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(1011): Symfony\Component\DependencyInjection\ContainerBuilder->doResolveServices(Array, Array, true)
#26 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(567): Symfony\Component\DependencyInjection\ContainerBuilder->createService(Object(Symfony\Component\DependencyInjection\Definition), Array, true, 'cli.command')
#27 /var/www/html/vendor/symfony/dependency-injection/ContainerBuilder.php(512): Symfony\Component\DependencyInjection\ContainerBuilder->doGet('cli.command', 1)
#28 /var/www/html/vendor/behat/behat/src/Behat/Testwork/Cli/Application.php(161): Symfony\Component\DependencyInjection\ContainerBuilder->get('cli.command')
#29 /var/www/html/vendor/behat/behat/src/Behat/Testwork/Cli/Application.php(122): Behat\Testwork\Cli\Application->createCommand(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#30 /var/www/html/vendor/symfony/console/Application.php(171): Behat\Testwork\Cli\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#31 /var/www/html/vendor/behat/behat/bin/behat(34): Symfony\Component\Console\Application->run()
#32 /var/www/html/vendor/bin/behat(120): include('/var/www/html/v...')
#33 {main}
  thrown in /var/www/html/vendor/symfony/panther/src/PantherTestCase.php on line 41

Notably if I remove the MinkExtension part from the behat.yml, I do not see the error. So, if the behat.yml is just this:

default:
  extensions:
    Robertfausk\Behat\PantherExtension: ~

Then I get the usual output:

No scenarios
No steps
0m0.00s (3.37Mb)
robertfausk commented 5 months ago

This is cause this library uses robertfausk/mink-panther-driver which is build on top of symfony/panther. symfony/panther seems to expect to have one of symfony/framework-bundle or phpunit/phpunit to be installed. https://github.com/symfony/panther/blob/main/src/PantherTestCase.php#L16-L17