web-dev-qa-db-fra.com

Les tests Phpunit avertissent qu'aucun test n'a été trouvé en classe

J'essaie d'apprendre à tester avec phpunit et laravel. Lorsque je lance le test à l'aide de la commande phpunit, je reçois un avertissement:

There was 1 failure:

1) Warning
No tests found in class "PostsTest".

FAILURES!                            
Tests: 2, Assertions: 1, Failures: 

Mon nom de classe de test et mon nom de fichier correspondent. J'ai lu d'autres problèmes sur les noms inégalés. mon nom de fichier est PostsTest.php et mon fichier de test:

class PostsTest extends ApiTester {


    public function it_fetches_posts()

    {
        $this->times(5)->makePost();

        $this->getJson('api/v1/posts');

        $this->assertResponseOk();

    }

    private function makePost($postFields=[])
    {
        $post = array_merge([
            'title' => $this->fake->sentence,
            'content' => $this->fake->paragragraph
        ], $postFields);

        while($this->times --)Post::create($post);
    }
}

si nécessaire mon ApiTester:

use Faker\Factory as Faker;

class ApiTester extends TestCase {
    protected $fake;
    protected $times = 1;
    function __construct($faker)
    {
        $this->fake = Faker::create();
    }
}

Je n'ai aucune idée de l'endroit où se trouve l'erreur. Laravel ou mes paramètres phpunit locaux ou toute autre chose. Toute aide est appréciée.

Merci.

42
ytsejam

Les annotations sont la réponse .

/** @test */
public function it_tests_something()
{
  ...
}

Ajout de ce @test indique à phpunit de traiter la fonction comme un test, quel que soit le nom.

74
CJ Thompson

Les seules méthodes que PHPUnit reconnaîtra comme tests sont celles avec des noms commençant par test .

Vous devez donc renommer la méthode it_fetches_posts() en test_it_fetches_posts ou testItFetchesPosts. La dénomination des caisses de chameaux est facultative mais utile si vous utilisez l'option --testdox plus tard.

En outre, comme indiqué dans d'autres réponses, vous pouvez également ajouter le @test annotation à n'importe quelle méthode et elle sera considérée comme un test par PHPUnit.

89
gontrollez

Soit commencez son nom par Word 'test' comme test_something_should_work ou mettez à jour les documents de test avec cette annotation /** @test */

3
Yamen Ashraf

En outre, considérons un cas où vous testez une classe A qui nécessite une classe B (que vous allez simuler). Lorsque $a->someMethod($mocked_B_class) est appelée, assurez-vous que vous ne disposez d'aucun avertissement tel que tenter d'accéder à une propriété d'un tableau comme vous accéderiez à la propriété d'une classe ($array = ['one','two']; $array->one).

Dans ce cas, il ne vous donnera aucune information sur le test ou l'erreur

0
shabany