Search code examples
phpphpunitzend-framework2zend-framework3

phpunit not marking test as completed and successful


I'm having issues getting phpunit to positively test a method i created. im using a zend application and the ApplicationTest works fine. Here's my current command line output:

ApplicationTest\Controller\IndexController
 [x] Sample not active
 [x] Index action can be accessed
 [x] Index action view model template rendered within layout
 [x] Invalid route does not crash

PlutoTest\Stdlib\ArrayUtils
 [ ] Sample not active

As you can see, there is no X inside my ArrayUtils test. I even put the method inside the ApplicationTest and you can see it executed correctly.

Here's the phpunit class:

namespace PlutoTest\Stdlib;

use Pluto\Stdlib\ArrayUtils;
use Pluto\pluto;
use PHPUnit\Framework\TestCase;

class ArrayUtilsTest extends TestCase
{
    public function setUp()
    {
        $configOverrides = [];
        $phpunitConfigFile=$this->getNormalizedPhpunitConfigFile();
        $this->setApplicationConfig(ArrayUtils::merge(
            include $phpunitConfigFile,
            $configOverrides
            ));
        parent::setUp();
    }

    private function getNormalizedPhpunitConfigFile()
    {
        $file = sprintf('%s/application.phpunit.php',pluto::path('zfconfig'));
        return $file;
    }    

    public function testSampleNotActive()
    {
        $stack = [];
        $this->assertEquals(0, count($stack));

        array_push($stack, 'foo');
        $this->assertEquals('foo', $stack[count($stack)-1]);
        $this->assertEquals(1, count($stack));

        $this->assertEquals('foo', array_pop($stack));
        $this->assertEquals(0, count($stack));
    }
}

Here's my phpunit.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <phpunit 
        colors="true"
        bootstrap="bootstrap.phpunit.php" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/6.3/phpunit.xsd"
        backupGlobals="true"
        backupStaticAttributes="false"
        cacheTokens="false"    
        convertErrorsToExceptions="true"
        convertNoticesToExceptions="true"
        convertWarningsToExceptions="true"
        forceCoversAnnotation="true"        
        processIsolation="false"
        stopOnError="false"
        stopOnFailure="false"
        stopOnIncomplete="false"
        stopOnSkipped="false"
        timeoutForSmallTests="1"
        timeoutForMediumTests="10"
        timeoutForLargeTests="60"
        beStrictAboutTestsThatDoNotTestAnything="true"
        beStrictAboutOutputDuringTests="true"
        beStrictAboutTestSize="true"
        verbose="true">
            <testsuites>
                <testsuite name="Application Module Test Suite">
                    <directory phpVersion="7.0.0" phpVersionOperator=">=">./module/Application/test</directory>
                    <directory phpVersion="7.0.0" phpVersionOperator=">=">./test/pluto/src</directory>
                </testsuite>
            </testsuites>
            <php>
              <env name="APPLICATION_ENV" value="development"/>
              <ini name="display_errors" value="1"/>
              <ini name="display_startup_errors" value="1"/>
              <ini name="error_reporting" value="32767"/>
              <ini name="report_memleaks" value="1"/>
           </php>
    </phpunit>

And here's my composer:

"autoload-dev" : {
    "psr-4" : {
        "ApplicationTest\\" : "module/Application/test/",
        "PlutoTest\\" : "test/pluto/src"
    }
},

Solution

  • Try changing as the following:

    "autoload-dev": {
        "psr-4": {
            ...
            "YourModuleNameTest\\": "module/YourModuleName/test/"
        }
    },
    

    If done, do not forget to run dump-autoload through composer in your terminal.

    What if you modify your phpunit.xml this way:

    <testsuites>
        <testsuite name="Application Module Test Suite">
            <directory phpVersion="7.0.0" phpVersionOperator=">=">./module/Application/test</directory>
        </testsuite>
        <testsuite name="YourModuleName">
            <directory phpVersion="7.0.0" phpVersionOperator=">=">./module/YourModuleName/test</directory>
        </testsuite>        
    </testsuites>
    

    Next up, run the following command:

    ./vendor/bin/phpunit --testsuite YourModuleName
    

    To list all available suites, run the following command:

    ./vendor/bin/phpunit --list-suites
    

    To list all available tests, run the following command:

    ./vendor/bin/phpunit --list-tests