2014-12-22 17 views
23

Sto cercando di imparare come testare phpunit e laravel. Quando iniziare il test utilizzando phpunit comando, sto ottenendo un avvertimento:Test di phpunit non avverte nessun test trovato nella classe

There was 1 failure: 

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

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

Il mio test nome di classe e nome del file partite. Ho letto altri problemi relativi ai nomi non corrispondenti. il mio nome è PostsTest.php e il mio file di prova:

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); 
    } 
} 

, se necessario, la mia ApiTester:

use Faker\Factory as Faker; 

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

Non ho alcuna idea di dove l'errore è. Laravel o le mie impostazioni phpunit locali o qualsiasi altra cosa. Qualsiasi aiuto è apprezzato.

Grazie.

+0

Hai letto il manuale? – hek2mgl

+0

Ho letto il manuale in laravel. e sto seguendo il tutorial in laracasts. Mi manca qualche altro manuale? – ytsejam

+0

Capisco cosa intendi ora. Nel video tut ho osservato che il nome della funzione era usato in questo modo e stava funzionando. Non immagino che il nome della funzione debba essere "testItFetchesPosts". Pensavo fosse solo un nome di esempio. – ytsejam

risposta

67

Gli unici metodi che PHPUnit riconoscerà come test sono quelli con nomi starting with test.

Quindi è necessario rinominare il metodo it_fetches_posts() in test_it_fetches_posts o testItFetchesPosts. La denominazione del caso cammello è facoltativa ma utile se si utilizza l'opzione --testdox più tardi.

Inoltre, come indicato in altre risposte, è possibile aggiungere l'annotazione @test a qualsiasi metodo e verrà considerato un test da PHPUnit.

+0

grazie per la risposta. Ho iniziato a ottenere i risultati. Immagino che il tutorial sia diventato obsoleto. – ytsejam

+16

Questa risposta è errata, poiché un'annotazione '/ ** @test * /' indica a phpunit di trattare qualsiasi metodo indicato come test –

35

Annotations are the answer.

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

Aggiungendo che @test dice PHPUnit per trattare la funzione come test, indipendentemente dal nome.

0

Inoltre, prendere in considerazione un caso in cui si sta testando una classe A che richiede una classe B (che si deriderà). Quando viene chiamato il numero $a->someMethod($mocked_B_class), assicurati di non avere alcun avviso in esso, come ad esempio provare ad accedere a una proprietà di un array come se avessi accesso alla proprietà di una classe ($array = ['one','two']; $array->one).

In questo caso non fornirà alcuna informazione sul test o l'errore

Problemi correlati