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.
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.
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.
Soit commencez son nom par Word 'test' comme test_something_should_work
ou mettez à jour les documents de test avec cette annotation /** @test */
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