4

where running all test php artisan test everything work as expected and all tests runs

enter image description here

now , when i run signle test php artisan test --filter test_get_profile i get this wired error

An error occurred inside PHPUnit.

Message:  Cannot find TestCase object on call stack
Location: D:\laragon\www\project\vendor\phpunit\phpunit\src\TextUI\TestRunner.php:68

but some other tests still work, for example, test_login and test_register works , but when i create a new test sometimes it work sometimes i get this wired error

PS: i add the file path example php artisan test tests/Feature/AccountTest.php --filter test_get_profile i didnt get any error , but i dont what to always include the file path

please note that all tests are empty

public function test_get_profile(): void
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }

anyone know the issue ? i'm using laravel 10 and phpunit 10

phpunit.xml:

<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
         bootstrap="vendor/autoload.php"
         colors="true"
>
    <testsuites>
        <testsuite name="Unit">
            <directory suffix="Test.php">./tests/Unit</directory>
        </testsuite>
        <testsuite name="Feature">
            <directory suffix="Test.php">./tests/Feature</directory>
        </testsuite>
    </testsuites>
    <source>
        <include>
            <directory suffix=".php">./app</directory>
        </include>
    </source>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="BCRYPT_ROUNDS" value="4"/>
        <env name="CACHE_DRIVER" value="array"/>
        <!-- <env name="DB_CONNECTION" value="sqlite"/> -->
        <!-- <env name="DB_DATABASE" value=":memory:"/> -->
        <env name="MAIL_MAILER" value="array"/>
        <env name="QUEUE_CONNECTION" value="sync"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="TELESCOPE_ENABLED" value="false"/>
    </php>
</phpunit>

UserTest.php


namespace Tests\Feature;

use Tests\TestCase;

class UserTest extends TestCase
{
    public function test_login(): void
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }

    public function test_register(): void
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }
}

AccountTest.php


namespace Tests\Feature;

use Tests\TestCase;

class AccountTest extends TestCase
{
    /**
     * A basic feature test example.
     */
    public function test_get_profile(): void
    {
        $response = $this->get('/');

        $response->assertStatus(200);
    }
}
d3ridi
  • 117
  • 1
  • 7

1 Answers1

7

This was a bug in PHPUnit.

https://github.com/sebastianbergmann/phpunit/issues/5403

This is the fix -

https://github.com/sebastianbergmann/phpunit/commit/16166431bce84bb100d8e7fe867d612bdfe61776#diff-548ab8441af390a03ab9bf5e83a441aaa67c43de14b247a1426c2983b434bd89

Run a composer update to get the latest version.