Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Testes unitários com Facades do Laravel

Esta é minha classe para teste unitário:

<?php

namespace Tests\Unit;

use Illuminate\Support\Facades\Storage;
use PHPUnit\Framework\TestCase;

class ExampleTest extends TestCase
{
    public function testBasicStorage()
    {
        $storage = Storage::disk('local');

        $response = $storage->put('test.txt', 'test');

        $this->assertTrue($response);
    }
}

Toda vez que executo o teste recebo este erro:

A facade root has not been set.

  at vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:258
    254|     {
    255|         $instance = static::getFacadeRoot();
    256| 
    257|         if (!$instance) {
  > 258|             throw new RuntimeException('A facade root has not been set.');
    259|         }
    260| 
    261|         return $instance->$method(...$args);
    262|     }

  1   tests/Unit/ExampleTest.php:12
      Illuminate\Support\Facades\Facade::__callStatic("disk")

Percebi que este erro acontece para qualquer facade do laravel nos testes unitários, no entato nos testes de feature o erro não acontece.

Minha duvida é, quando eu faço um serviço que utilize qualquer facade do laravel não preciso fazer teste unitário?

1 resposta
solução!

Encontrei o erro.

Eu deveria fazer isto

use Tests\TestCase;

Ao invés disto:

use PHPUnit\Framework\TestCase;