Como testar arquivos usando Laravel?
Alguns meses atrás eu estava trabalhando em um projeto usando Laravel e o mesmo possui upload de arquivos. Desde que eu comecei a desenvolver fazendo o uso de testes automatizados, eu nunca tinha tido a oportunidade de construí-los com arquivos. Então eu desconbri que o Laravel fornece uma forma bem fácil de criar aquivos fake nos testes.
Minha intenção aqui é mostrar como podemos criar alguns testes para validar aquivos usando o Laravel.
Falar é fácil. Me mostre o código.
– Linus Torvalds
Para este arquivo, eu crei um novo projeto Laravel com um endpoint bem simples.
Route::post('/documents/new', function (Request $request) {
$validator = Validator::make($request->all(), [
'file' => 'required|mimes:pdf|max:2048'
]);
if ($validator->fails()) {
return response()->json(['error' => $validator->errors()], 400);
}
return response()->json(['success' => 'Congratulations!'], 200);
});
Para a requisição ser bem sucedida, a rota está esperando um arquivo pdf e o tamanho dele precisa ser menor que 2048 KB ou 2 MB.
Está na hora do teste!!!
No inicio, falei sobre a uma forma que o Laravel fornece para os desenvolvedores testarem arquivos. O framework possui a classe Illuminate\Http\UploadedFile
que é muito simples de usar. Eu criei três testes. O primeiro é para sucesso, o segundo verifica se o arquivo possui uma extensão válida e o último valida o tamanho do arquivo.
class UploadExampleTest extends TestCase
{
/**
* Deve retornar o código 200.
*
* @return void
*/
public function test_the_upload_returns_a_successful_response()
{
$document = UploadedFile::fake()->create('tests/test.pdf');
$response = $this->post('/api/documents/new', ['file' => $document]);
$response->assertStatus(200);
}
/**
* Deve retornar o código 400 por causa da extensão do arquivo.
*
* @return void
*/
public function test_the_upload_returns_a_bad_request_cause_file_extension()
{
$document = UploadedFile::fake()->create('tests/test.txt');
$response = $this->post('/api/documents/new', ['file' => $document]);
$response->assertStatus(400);
}
/**
* Deve retornar o código 400 por causa do tamanho do arquivo.
*
* @return void
*/
public function test_the_upload_returns_a_bad_request_cause_file_size()
{
$document = UploadedFile::fake()->create('tests/test.pdf', 5120);
$response = $this->post('/api/documents/new', ['file' => $document]);
$response->assertStatus(400);
}
}
O que eu quero destacar é UploadFile::fake()->create(‘tests/test.pdf’, 5120)
. O primeiro argumento, você define exatamente o nome do arquivo a extensão. No segundo, você configura qual o tamanho do arquivo que você quer. Muito fácil, não?
Se você conhece alguma forma diferente de fazer, deixe seu comentário. Compartilhar conhecimento é sempre bom :)
Laravel
upload
php
testes
Discussion and feedback