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,
Другие вопросы по тегам