Laravel Dusk - Конфиг класса не существует
Недавно обновил проект 5.3 до 5.4 и все показалось хорошим.
Сегодня я начал внедрять Dusk, однако столкнулся с проблемой при запуске примера теста
☁ footy-finance [5.4] ⚡ php artisan dusk
PHPUnit 6.0.0 by Sebastian Bergmann and contributors.
E 1 / 1 (100%)
Time: 162 ms, Memory: 6.00MB
There was 1 error:
1) Tests\Browser\ExampleTest::testBasicExample
ReflectionException: Class config does not exist
/Users/owen/Sites/footy-finance/vendor/laravel/framework/src/Illuminate/Container/Container.php:681
/Users/owen/Sites/footy-finance/vendor/laravel/framework/src/Illuminate/Container/Container.php:565
/Users/owen/Sites/footy-finance/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:105
/Users/owen/Sites/footy-finance/vendor/laravel/framework/src/Illuminate/Foundation/helpers.php:263
/Users/owen/Sites/footy-finance/vendor/laravel/dusk/src/TestCase.php:203
/Users/owen/Sites/footy-finance/vendor/laravel/dusk/src/TestCase.php:40
Я посмотрел на строку 40 TestCase.php
И его
public function baseUrl()
{
return config('app.url');
}
Так что это выглядит как-то связано с глобальным config
у кого есть идеи?
я бегу
- PHP 7.0.14
- Laravel / Framework 5.4.8
- Laravel / Dusk 1.0.5
Полный composer.lock можно увидеть https://gist.github.com/OwenMelbz/c05172b33f6eb4483e37a56469b53722
Скрестив пальцы, ребята, есть идеи!
Ура:)
9 ответов
Для всех, кто имел эту проблему.
Я предпочел стабильный набор в файле композитора, который установил PHPUnit 6.
Это было "сделано стабильно сегодня" - таким образом, оно установлено во время обновления композитора.
Понижение до PHPUnit 5 решает проблему - поэтому было плохое время, начиная с сегодняшнего дня.
У меня была эта ошибка в журнале
Class config does not exist
проблема со мной заключалась в том, что в файле.env я установил переменную конфигурации следующим образом:
APP_NAME=Application Name
обратите внимание на пространство. Когда я изменил это на это:
APP_NAME="Application Name"
проблема была решена
Проблема с файлом.env App_Name
в оригинальном файле это написано таким образом >>> APP_NAME = имя приложения
Сделайте так: APP_NAME="Имя приложения"
В моем случае это решение работает:
1) Удалите все содержимоеbootstrap/cache
папка
2) Запускаем композиторdump
команда
Я просто столкнулся с той же проблемой, в моем случае.env был чистым, без развернутых пустых пространств.
Это сообщение об ошибке также может появиться при написании / отладке тестового примера с использованием setup()
метод в этом тесте, забыв вызвать parent::setup()
как первый оператор в этой функции.
protected $stuf;
function setup() {
parent::setup();
$this->stuf = 'stuf';
}
Я нашел очень полезную информацию здесь о том, что еще может случиться, когда вы получаете это сообщение об ошибке.
Я очень опаздываю на вечеринку, но для всех, кто сталкивается с той же проблемой с модульным тестом Laravel, и ни одно из вышеперечисленных решений не работает, вы можете заглянуть в мое и посмотреть, может ли это помочь.
В моем случае я пытался вызвать метод, который удалит все тестовые ключи, которые сохраняются в моей базе данных Redis, когда я запускаю модульный тест. Метод вызывается в методе класса. Ошибка возникает из-за того, что родительский конструктор вызывается до фактического
tearDown
код выполняется. Вот почему у меня ошибка.
Вместо этого ......
/**
* tearDown is executed after test stub
*/
protected function tearDown()
{
parent::tearDown();
$this->deleteTestKeys();
}
Поменяйте его на этот ...
protected function tearDown()
{
$this->deleteTestKeys();
parent::tearDown();
}
В этом случае класс еще не уничтожен полностью, и
config
метод будет вызван соответственно.
У меня тоже была эта проблема. Для меня это было вызвано вызовом config()
функция внутри метода dataProvider. DataProviders вызываются до createApplication()
Метод инициализирует приложение и заполняет контейнер DI. следовательно config()
не удается, потому что app('config')
вызов в вспомогательной функции не может разрешить config
класс из контейнера.
У меня было это в приложении Lumen сегодня. После некоторого исследования и игры, я обнаружил, что это было потому, что в PHPStorm он добавлял --no-configuration
вариант на phpunit
команда, потому что я не настроил мои настройки PHPUnit для проекта в IDE.
Я исправил это, нажав "Run > Edit Configurations", а затем в "Defaults > PHPUnit", щелкнув маленькую кнопку справа от опции "Use альтернативный файл конфигурации:", и установил для "File configuration default:" полный путь к вашему проекту phpunit.xml
,
Надеюсь это поможет!
Я увидел эту ошибку после того, как следовал некоторым хитрым инструкциям по установке стороннего модуля, в котором говорилось, что нужно зарегистрировать поставщика услуг вbootstrap/app.php
$app->singleton(...);
$app->singleton(...);
$app->register(\Third\Party\ServiceProvider::class);
Это вызвало$this->app['config']
чтобы сгенерировать ошибкуBindingResolutionException: Target class [config] does not exist.
Я исправил это, вставив его вconfig/app.php
, где он принадлежит:
/*
* Package Service Providers...
*/
Third\Party\ServiceProvider::class,