Primeiro copie o arquivo .env.example e renomeie-o para .env.testing:
Em seguida, execute:
toque em test.sqlite
Um arquivo test.sqlite será gerado no diretório D: / laragon / www / laraveauth:
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"
Próxima execução:
PHP artesão make: teste TaskApiTest
O arquivo está localizado em:
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:
Vamos implementar o método de criação de um teste primeiro:
O método é denominado relativamente fácil de entender;
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:
Então: o console executa:
. \ vendor \ bin \ phpunit.bat
O resultado:
Resolução de erro:
1. APP_KEY não está definido no arquivo env.testing:
Basta copiar um dos arquivos .env;
Execute novamente:
. \ vendor \ bin \ phpunit.bat
O resultado:
Sem pistas, precisamos disso:
$ this-> withoutExceptionHandling ();
Execute novamente:
. \ vendor \ bin \ phpunit.bat
Você pode encontrar mais informações sobre o rastreamento de erros:
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:
Método de correção: laragon abre a extensão pdo_sqlite. [Enquanto o PHP abrir a extensão sqlite]
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
O teste passou!
Em seguida, afirmamos Json
O resultado falhou:
Modifique-o e o resultado ainda falha:
Modifique novamente:
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 ()); } }