Testando a API usando o PHPUnit Laravel

Primeiro copie o arquivo .env.example e renomeie-o para .env.testing:

Comentário 2020-04-16 001122

Comentário 2020-04-16 001140

Em seguida, execute:

toque em test.sqlite

Comentário 2020-04-16 001411

Um arquivo test.sqlite será gerado no diretório D: / laragon / www / laraveauth:

Comentário 2020-04-16 001514

Em seguida, modificamos a configuração do banco de dados do arquivo .env.testing para:

DB_CONNECTION = sqlite 
DB_DATABASE = "D: /laragon/www/laraveauth/test.sqlite"

Comentário 2020-04-16 001636

Próxima execução:

PHP artesão make: teste TaskApiTest

Comentário 2020-04-16 001758

O arquivo está localizado em:

Comentário 2020-04-16 001848

Em seguida, antes de modificar este arquivo, execute

rota artesão php: lista

Dê uma olhada nas rotas relacionadas para solicitações de tarefas da API:

Comentário 2020-04-16 002115

Vamos implementar o método de criação de um teste primeiro:

O método é denominado relativamente fácil de entender;

Comentário 2020-04-16 002422

Envie uma solicitação de postagem para / api / task; o código final é o seguinte:

função pública testCanCreateTask () 
{ 
    $ formData = [ 
        'title' => 'título da tarefa de teste de amostra', 
        'description' => 'descrição da tarefa de teste de amostra', 
        'due' => 'próxima sexta-feira', 
    ]; 

    $ response = $ this-> post (rota ('task.store'), $ formData); 

    $ response-> assertStatus (201); 
}

Como o phpunit existe na pasta vendor \ bin:

Comentário 2020-04-16 003303

Então: o console executa:

. \ vendor \ bin \ phpunit.bat

Comentário 2020-04-16 003410

O resultado:

Comentário 2020-04-16 003435

Resolução de erro:

1. APP_KEY não está definido no arquivo env.testing:

Comentário 2020-04-16 003554

Basta copiar um dos arquivos .env;

Execute novamente:

. \ vendor \ bin \ phpunit.bat

O resultado:

Comentário 2020-04-16 003725

Sem pistas, precisamos disso:

$ this-> withoutExceptionHandling ();

Comentário 2020-04-16 004149

Execute novamente:

. \ vendor \ bin \ phpunit.bat

Você pode encontrar mais informações sobre o rastreamento de erros:

Comentário 2020-04-16 004307

O resultado é que não efetuamos login antes de executar o método de armazenamento:

Os resultados revisados ​​e de execução são os seguintes:

Comentário 2020-04-16 005019

Método de correção: laragon abre a extensão pdo_sqlite. [Enquanto o PHP abrir a extensão sqlite]

Comentário 2020-04-16 005633

Vamos adicionar uma característica na classe

use RefreshDatabase;

Essa característica atualiza o banco de dados toda vez que a unidade é testada. [Executar migração uma vez para migração]

Execute novamente:

. \ vendor \ bin \ phpunit.bat

Comentário 2020-04-16 005752

O teste passou!

Em seguida, afirmamos Json

Comentário 2020-04-16 010020

O resultado falhou:

Comentário 2020-04-16 010112

Modifique-o e o resultado ainda falha:

Comentário 2020-04-16 010242

Modifique novamente:

Comentário 2020-04-16 010414

O teste passou!

O restante dos testes não são gravados.

A documentação está aqui: Guia de Teste

O arquivo TaskApiTest.php é o seguinte:

<? 

namespace php Tests \ Feature; 

use App \ Task; 
use App \ User; 
use Carbon \ Carbon; 
use Illuminate \ Foundation \ Testing \ RefreshDatabase; 
use Illuminate \ Foundation \ Testing \ WithFaker; 
use Tests \ TestCase; a classe TaskApiTest estende o TestCase 
{ 
    use RefreshDatabase; 
    $ user protegido; função 
    pública setUp (): void 
    { 
        parent :: setUp (); 
        $ this-> user = factory (Usuário :: classe ) -> create (); 
        $ this-> actorAs ($ this-> user, ' api '); 
    } / **





    
     * Um exemplo de teste de recurso básico. 
     * 
     * @return void 
     * / função 
    pública testCanCreateTask () 
    { 
        $ due = Carbon :: parse (' próxima sexta-feira '); 
        $ formData = [ 
            ' title ' => ' título da tarefa de teste de amostra ', 
            ' description ' => ' descrição da tarefa de teste de amostra ', 
            ' due ' => $ due, 
        ]; 
        $ this-> withoutExceptionHandling (); 

        $ response = $ this-> post (rota (' task.store '), $ formData); 
        $ response->data '=> $ formData]); 
    } função
 
    pública testCanShowTask () 
    { 
        $ task = factory (Task :: class ) -> create (); 
        $ this-> user-> tasks () -> save ($ task); 
        $ response = $ this-> get (rota (' tarefas.show ', $ task-> id)); 
        $ response-> assertStatus (200); 
    } função 
    pública testUpdateTask () 
    { 
        $ task = factory (Task :: class ) -> create (); 
        $ this-> user-> tasks () -> save ($ task); 
        $ due = Carbon :: parse (' próxima sexta-feira '); 



        $ formData = [ 
            ' title ' => ' título da tarefa de teste de amostra ', 
            ' description ' => ' descrição da tarefa de teste de amostra ', 
            ' due ' => $ due, 
        ]; 
        $ this-> withoutExceptionHandling (); 

        $ resposta = $ this-> put (rota (' task.update ', $ task-> id), $ formData); 
        $ response-> assertStatus (200) 
            -> assertJson ([' dados ' => $ formData]);
) -> criar (); 
        $ this-> user-> tasks () -> save ($ task); 
        $ response = $ this-> delete (rota (' task.destroy ', $ task)); 
        $ response-> assertStatus (200) -> assertJson ([' message ' => ' Sucesso excluído! ']); 
    } função
 
    pública testShowAllTasks () 
    { 
        $ tasks = factory (Task :: class , 3) -> create (); 
        $ this-> user-> tasks () -> saveMany ($ tasks); 
        $ response = $ this-> get (rota (' tarefas.index ')); 
        $ resposta-> assertStatus (200) -> assertJson ($ task-> toArray ()); 
    } 
}

Acho que você gosta

Origin www.cnblogs.com/dzkjz/p/12709840.html
Recomendado
Clasificación