2017-02-13 2 views
0

Я работаю над пакетом, который опирается на фасад Config. Сам код работает отлично, но при тестировании я сталкиваюсь с проблемами.Mock Illuminate Конфигурация фасада без Laravel

Первоначально я использовал этот код:

Config::shouldReceive('foo.bar') 
    ->andReturn(true); 

Целых others, я столкнулся с некоторыми проблемами.

Позже я прочитал, что насмехается над фасадом Configisn't encouraged.

Чтобы обойти это, большинство людей, как правило, предлагают использовать следующие вместо:

Config::set('foo.bar', true); 

который я считаю, хорошо работает, если вы тестируете от Laravel/лм.

Но моя проблема в том, что нет. Я просто полагаться на несколько Illuminate пакетов, так что не будет работать, так как я получаю: RuntimeException: A facade root has not been set.

В этот момент кто-то может предположить, что я просто должен вводить зависимость Config репозитория, но я использую Config фасад в признаке, который используется моделью Eloquent, поэтому DI не будет работать.

Есть ли какой-либо другой способ, я могу решить это?

Спасибо!

PS: Этот вопрос был также размещен на Laracasts

ответ

0

Для тех, кто работает в подобную проблему, я, наконец, нашел правильный путь для решения этой проблемы.

Тестирование пакетов Laravel - это именно то, для чего нужен пакет Testbench.

От documentation:

Чтобы использовать TestBench компонент, все, что вам нужно сделать, это продлить Orchestra\Testbench\TestCase вместо PHPUnit\Framework\TestCase.

Таким образом, настройка значения конфигурации - это вопрос вызова Config::set(), как и при полной установке Laravel. Не более Mockery вопросов.

-1

Я столкнулся с той же проблемой. Lumen 5.4 с использованием Config::set('key', 'value') не работал. Поэтому я должен был использовать этот путь.

//test 
use Illuminate\Support\Facades\Config; 

Config::shouldReceive('get') 
        ->once() 
        ->with('key') 
        ->andReturn('value'); 

,

//code 
use Illuminate\Support\Facades\Config; 

Config::get('key'); //instead config('key'); 
+0

Ваш вопрос не связан с моим. Вы используете Lumen, у которого все еще есть большинство пакетов Illuminate, поэтому 'Config :: set()' должен работать до тех пор, пока вы включаете Facades в 'bootstrap/app.php'. Мой вариант использования предназначен для тестирования пакета Laravel/Lumen в автономной среде, где у вас нет всей структуры в вашем распоряжении, поэтому вам нужно полагаться на Testbench.Кроме того, как указано в документации, издевательство над 'Config' не является лучшей практикой. Следовательно, downvote. –