149

I want to test specific testClass in my project since there are a lot of test class that's failure and I just want to test one Class at a time.

I've created the test Class in following folder \test\repositories\ApplicationVersionFormat.php :

<?php
use App\Repositories\ApplicationVersionFormat;

class ApplicationVersionFormatTest extends \TestCase
{
  public function testValidFormat()
  {
    $version = '1.2.3';
    $appVersion = new ApplicationVersionFormat();
    $this->assertEquals(true,$appVersion->isValidVersion($version));
  }

  public function testInvalidFormat()
  {
    $version = '11.2.3';
    $appVersion = new ApplicationVersionFormat();
    $this->assertEquals(false,$appVersion->isValidVersion($version));
  }

  public function testInvalidFormat2()
  {
    $version = '1.22.3';
    $appVersion = new ApplicationVersionFormat();
    $this->assertEquals(false,$appVersion->isValidVersion($version));
  }

  public function testInvalidFormat3()
  {
    $version = '1.2.33';
    $appVersion = new ApplicationVersionFormat();
    $this->assertEquals(false,$appVersion->isValidVersion($version));
  }

  public function testInvalidFormat4()
  {
    $version = '11.22.33';
    $appVersion = new ApplicationVersionFormat();
    $this->assertEquals(false,$appVersion->isValidVersion($version));
  }
}

so I've tried this follwing command but none of this works :

  • phpunit "repositories\AppVersionTest". => Cannot open file "test/repositories/AppVersionTest.php"
  • phpunit "test\repositories\AppVersionTest". => Cannot open file "test/repositories/AppVersionTest.php"
  • phpunit --filter "repositories\AppVersionTest". => No tests executed!
  • phpunit --testsuite "repositories\AppVersionTest". => No tests executed!

any help? thanks

Gujarat Santana
  • 9,854
  • 17
  • 53
  • 75

9 Answers9

164

After trying several ways, I found out that I don't need to include the folder to test the specific test class. This works for me it runs all the test on the class:

phpunit --filter ApplicationVersionFormatTest

I think it's because my ApplicationVersionFormatTest extend The TestCase and return application instance which serves as the "glue" for all the components of Laravel.

Gujarat Santana
  • 9,854
  • 17
  • 53
  • 75
  • 1
    In addition to the phpunit command, you may use the test Artisan command to run your tests. The Artisan test runner provides verbose test reports in order to ease development and debugging: – Yohanim Jul 30 '21 at 03:03
  • I've tried to put the whole test namespace, but it didn't work; you should pass the class name only for it to work. – shamaseen Jul 06 '22 at 14:27
  • You last voted on this answer May 26, 2021 at 13:51. Your vote is now locked in unless this answer is edited. here we come again :) after 2 years – Moode Osman May 29 '23 at 13:52
116

for run phpunit test in laravel by many ways ..

vendor/bin/phpunit --filter methodName className pathTofile.php

vendor/bin/phpunit --filter 'namespace\\directoryName\\className::methodName'

for test single class:

vendor/bin/phpunit tests/Feature/UserTest.php
vendor/bin/phpunit --filter  tests/Feature/UserTest.php
vendor/bin/phpunit --filter 'Tests\\Feature\\UserTest'
vendor/bin/phpunit --filter 'UserTest' 

for test single method:

 vendor/bin/phpunit --filter testExample 
 vendor/bin/phpunit --filter 'Tests\\Feature\\UserTest::testExample'
 vendor/bin/phpunit --filter testExample UserTest tests/Feature/UserTest.php

for run tests from all class within namespace:

vendor/bin/phpunit --filter 'Tests\\Feature'

for more way run test see more

Amin Shojaei
  • 5,451
  • 2
  • 38
  • 46
Jignesh Joisar
  • 13,720
  • 5
  • 57
  • 57
89

To do the same thing using artisan run:

php artisan test --filter ApplicationVersionFormatTest
linktoahref
  • 7,812
  • 3
  • 29
  • 51
tbone1000
  • 1,000
  • 6
  • 4
30

For newer version this might work

php artisan test --filter {MethodName}

// for instance
php artisan test --filter test_example

OR

php artisan test --filter {ClassName}::{MethodName}

//for instance
php artisan test --filter ExampleTest::test_example
Osman Rafi
  • 938
  • 1
  • 16
  • 37
10

You can probably manage that with this answer to a related question.

Just mark the class with @group annotation and run PHPUnit with --group <group_name>

Update

Your command with --filter is not complete. Try this: phpunit --filter AppVersionTest "repositories\ApplicationVersionFormat.php"

Community
  • 1
  • 1
BVengerov
  • 2,947
  • 1
  • 18
  • 32
5

For laravel 8

php artisan test --filter ExampleTest
Edham Rabuan
  • 51
  • 1
  • 1
1

phpunit --filter <relative_path_to_file> for example , files to test are,test/repos/EloquentPushTest.php,test/repos/EloquentWebTest.php for testing EloquentWebTest.php

use phpunit --filter ./repos/ElqouentWebpush

1

Example of use:

php phpunit-5.7.27.phar -c app/ "src/package/TestBundle/Tests/Controller/ExampleControllerTest.php"
joan16v
  • 5,055
  • 4
  • 49
  • 49
0

Using phpunit.xml

the @group option can be used on classes and methods.

class A

/**
 * @group active
 * */
class ArrayShiftRightTest extends TestCase
{
}

class B

/**
 * @group inactive
 * */
class BinaryGapTest extends TestCase
{    
}

in phpunit.xml

<groups>
    <include>
        <group>active</group>
    </include>
    <exclude>
        <group>inactive</group>
    </exclude>
</groups>

the classes that belongs to group active will be executed.

f_i
  • 3,084
  • 28
  • 31